什么是JSON
JSON是一種取代XML的數據結構,和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網絡傳輸數據將減少更多流量從而加快速度。
那么,JSON到底是什么?
JSON就是一串字符串 只不過元素會使用特定的符號標注。
{ } 雙括號表示對象
[ ] 中括號表示數組
" " 雙引號內是屬性或值
: 冒號表示后者是前者的值(這個值可以是字符串、數字、也可以是另一個數組或對象)
所以 {"name": "Michael"} 可以理解為是一個包含name為Michael的對象
而[ {"name": "Michael"} , {"name": "Jerry"} ]就表示包含兩個對象的數組
當然了,你也可以使用{ "name" : ["Michael" , "Jerry"] }來簡化上面一部,這是一個擁有一個name數組的對象
PS:現在還有很多人存在一些誤區,為什么{name:'json'}在檢驗時通過不了, 那是因為JSON官網最新規范規定,如果是字符串,那不管是鍵或值最好都用雙引號引起來,所以上面的代碼就是{"name":"json"}
1 var
people =
{ "programmers": [ 2
3 { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, 4
5 { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" }, 6
7 { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } 8
9 ], 10
11 "authors": [ 12
13 { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, 14
15 { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, 16
17 { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } 18
19 ], 20
21 "musicians": [ 22
23 { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, 24
25 { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } 26
27 ] }
訪問數據
盡管看起來不明顯,但是上面的長字符串實際上只是一個數組;將這個數組放進 JavaScript 變量之后,就可以很輕松地訪問它。
實際上,只需用點號表示法來表示數組元素。所以,要想訪問 programmers 列表的第一個條目的姓氏,
只需在 JavaScript 中使用下面這樣的代碼:
people.programmers[0].lastName;
注意,數組索引是從零開始的。所以,這行代碼首先訪問 people變量中的數據;然后移動到稱為 programmers的條目,
再移動到第一個記錄([0]);最后,訪問 lastName鍵的值。結果是字符串值 “McLaughlin”。
修改 JSON 數據
正如可以用點號和括號訪問數據,也可以按照同樣的方式輕松地修改數據:
people.musicians[1].lastName = "Rachmaninov";
在將字符串轉換為 JavaScript 對象之后,就可以像這樣修改變量中的數據。
轉換回字符串
當然,如果不能輕松地將對象轉換回本文提到的文本格式,
那么所有數據修改都沒有太大的價值。在 JavaScript 中這種轉換也很簡單:
String newJSONtext = people.toJSONString();
這樣就行了!現在就獲得了一個可以在任何地方使用的文本字符串,
例如,可以將它用作 Ajax 應用程序中的請求字符串。
更重要的是,可以將任何JavaScript 對象轉換為 JSON 文本。並非只能處理原來用 JSON 字符串賦值的變量。
為了對名為 myObject的對象進行轉換,只需執行相同形式的命令:
String myObjectInJSON = myObject.toJSONString();
這就是 JSON 與本系列討論的其他數據格式之間最大的差異。如果使用 JSON,
只需調用一個簡單的函數,就可以獲得經過格式化的數據,可以直接使用了。
對於其他數據格式,需要在原始數據和格式化數據之間進行轉換。
即使使用 Document Object Model 這樣的 API(提供了將自己的數據結構轉換為文本的函數),
也需要學習這個 API 並使用 API 的對象,而不是使用原生的 JavaScript 對象和語法。
最終結論是,如果要處理大量 JavaScript 對象,那么 JSON 幾乎肯定是一個好選擇,
這樣就可以輕松地將數據轉換為可以在請求中發送給服務器端程序的格式。