「每日一題」JSON 是什麼?
- JSON 是什麼?
- "null" 是 JSON 嗎?"1" 是 JSON 嗎?
- JSON 與 JS 對象的區別是什麼?
JSON 是什麼?
如果你在 Google 搜索 JSON,那麼一眼就會看到 JSON 的官網 http://json.org。
官網會明明白白的告訴你,JSON 是一種數據格式。
什麼是格式?你可以理解為語法。JSON 的格式靈感來自於 JS 對象字面量的語法,但是兩者沒有任何關聯。
這種格式可以描述三種數據。
1. object(無序的「鍵-值」集合)。
語法如下:
這個圖叫做語法圖,你可以講其想像成鐵軌,有一列火車從左往右行駛。這列火車遇到的第一個符號是 { ,所以對象語法的第一個符號也必須是 { 。
如果繼續直行,會分別遇到 string、冒號和 value,所以對應的文本內容是 { string: value 。
然後你可以選擇直行或者往下拐,最後到達終點。
把旅途中遇到的所有符號連起來,就是完整的語法。
比如下面三種寫法都可以表示 object
{}n{"key1": "value1"} // string 對應 "key1",value 對應 "value1",後面會講n{"key1": "value1", "key2": "value2"}n
2. array(有序的值集合)
語法如下:
下面三種寫法都可以表示 array[]n[1]n[1,"hi"]n
3. value
value 對應對象語法圖裡的 value 和數組語法圖裡 value,value 也可以是 object 或 array,所以下面的語法成立:{"key1": { "key2" : "value2" } }n[ 1, [ 2, 3 ] ]n
另外值還可以是 string、number、true、false 和 null。
string 的語法如下:
你可能奇怪為什麼 string 的語法這麼複雜,我舉例來說明你就明白了:
"你好"n""你好""n"你好"n"/你好/"n"bfnrt特殊符號"n"你用編碼表示字元"n
上面都是合法的 string。這也是「JSON 中字元串必須使用雙引號」的原因——規定如此。
number 的語法如下,有興趣可以自己走一遍:
另外需要特殊提醒一下,true、false 和 null 都是合法的 JSON。JSON 和 JS Object 的區別
簡單來說,兩種沒有任何關聯。
JSON 語法的作者是道格拉斯(Douglas Crockford),JS 語法的作者是布蘭登?艾奇(Brendan Eich)。道格拉斯發明 JSON 的時候參考了 JS 的對象語法,僅此而已。
如果硬要說區別:
1. JSON 的字元串必須用雙引號。
2. JSON 無法表示 undefined,只能表示 "undefined"
3. JSON 無法表示函數
4. JSON 的對象語法不能有引用
以上,就是對 JSON 的詳細介紹。
更多前端知識,盡在前端交流 4 群:392054247
本文看似是在說 JSON,實際上在說什麼?
實際上我想告訴一些初學者,不要「道聽途說」學編程。
你聽別人說 JSON 是一種數據格式,你就信了,也不去 Google 一下,也不去找一下 JSON 的出處、發明者和規格文檔,你只是在「道聽途說學編程」,這是很蠢的行為。
推薦閱讀:
※如何從CFG轉換到State Machine?
※乾貨 | 劫持各個瀏覽器中的JSON漏洞
※【原創】R語言轉換並保存json文件--使用jsonlite包
※json 在 Python 爬蟲的應用
TAG:JSON |