JSON
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用瞭類似於C語言傢族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(網絡傳輸速度)。
JSON 語法
JSON 語法規則
JSON 語法是 JavaScript 對象表示語法的子集。
- 數據在名稱/值對中
- 數據由逗號分隔
- 花括號保存對象
- 方括號保存數組
JSON 名稱/值對
JSON 數據的書寫格式是:名稱/值對。 名稱/值對組合中的名稱寫在前面(在雙引號中),值對寫在後面(同樣在雙引號中),中間用冒號隔開:
1 "firstName":"John"
這很容易理解,等價於這條 JavaScript 語句:
1 firstName="John"
JSON 值
JSON 值可以是:
- 數字(整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(true 或 false)
- 數組(在方括號中)
- 對象(在花括號中)
- null
-
基礎示例
名稱 / 值對
1 {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
表示數組如果使用 JSON,就隻需將多個帶花括號的記錄分組在一起:
1 2 3 4 5 6 7 {
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 {"programmers":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
],
"authors":[
{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
],
"musicians":[
{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
]}
賦值給變量
例如,可以創建一個新的 JavaScript 變量,然後將 JSON 格式的數據字符串直接賦值給它: [3]
1 2 3 4 5 6 7 8 9 10 11 12 13 var people={"programmers":[{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
],
"authors":[
{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
],
"musicians":[
{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
]}
訪問數據
盡管看起來不明顯,但是上面的長字符串實際上隻是一個數組;將這個數組放進 JavaScript變量之後,就可以很輕松地訪問它。實際上,隻需用點號表示法來表示數組元素。所以,要想訪問 programmers 列表的第一個條目的姓氏,隻需在 JavaScript 中使用下面這樣的代碼:
1 people.programmers[0].lastName;
註意,數組索引是從零開始的。所以,這行代碼首先訪問 people變量中的數據;然後移動到稱為 programmers的條目,再移動到第一個記錄([0]);最後,訪問 lastName鍵的值。結果是字符串值 “McLaughlin”。 下面是使用同一變量的幾個示例。
1 2 3 people.authors[1].genre
//Valueis"fantasy"
people.musicians[3].lastName
//Undefined.Thisreferstothefourthentry,andthereisn'tone
people.programmers[2].firstName
//Valueis"Elliotte"
利用這樣的語法,可以處理任何 JSON 格式的數據,而不需要使用任何額外的 JavaScript 工具包或 API。
修改數據
正如可以用點號和方括號訪問數據,也可以按照同樣的方式輕松地修改數據:
1 people.musicians[1].lastName=
"Rachmaninov"
;
在將字符串轉換為 JavaScript 對象之後,就可以像這樣修改變量中的數據。
換回字符串
最終結論是,如果要處理大量 JavaScript 對象,那麼 JSON 是一個好選擇,這樣就可以輕松地將數據轉換為可以在請求中發送給服務器端程序的格式。