JSON(JavaScript Object Notation)是一種輕量級資料交換格式,基於 ECMAScript 子集,採用完全獨立於語言的文本格式,慣例類似 C 語言家族(C、C++、C#、Java、JavaScript、Python 等)。易於人閱讀編寫,也易於機器解析生成,常用於提升網路傳輸效率。
{} 保存物件[] 保存陣列"firstName": "John"
等價於 JavaScript:firstName = "John"
{ key: value, key: value, ... } 鍵值對結構,key 為屬性名,value 為屬性值(可為數字、字串、陣列、物件)。存取:物件.key
["java", "javascript", "vb", ...] 有序集合,索引存取,值類型同物件。
兩者組合可表示任意複雜資料結構。
{
"people": [
{"firstName": "Brett", "lastName": "McLaughlin", "email": "aaaa"},
{"firstName": "Jason", "lastName": "Hunter", "email": "bbbb"},
{"firstName": "Elliotte", "lastName": "Harold", "email": "cccc"}
]
}
{
"programmers": [{"firstName": "Brett", "lastName": "McLaughlin", "email": "aaaa"}, ...],
"authors": [{"firstName": "Isaac", "lastName": "Asimov", "genre": "sciencefiction"}, ...],
"musicians": [{"firstName": "Eric", "lastName": "Clapton", "instrument": "guitar"}, ...]
}
不同主條目下的記錄結構可不一致,JSON 完全動態。
var people = { "programmers": [...], "authors": [...], "musicians": [...] };
people.programmers[0].lastName; // "McLaughlin" people.authors[1].genre; // "fantasy" people.musicians[3].lastName; // undefined(不存在第 4 筆)
people.musicians[1].lastName = "Rachmaninov";
處理大量 JavaScript 物件時,JSON 可輕鬆轉為字串傳給伺服器端。
{
"id": "100000",
"text": "廊坊銀行總行",
"children": [
{
"id": "110000",
"text": "廊坊分行",
"children": [
{"id": "113000", "text": "廊坊銀行開發區支行", "leaf": true},
{"id": "112000", "text": "廊坊銀行解放道支行", "children": [...]}]
}
]
}
相關概念可參考「多叉樹」。
{ 開始,} 結束:, 分隔{"姓名": "大憨", "年齡": 24}
[ 開始,] 結束, 分隔{"學生": [{"姓名": "小明", "年齡": 23}, {"姓名": "大憨", "年齡": 24}]}
值可為字串、數值、true/false/null、物件、陣列,可巢狀。字串與數值格式類似 C/Java。
| 維度 | JSON | XML |
|---|---|---|
| 可讀性 | 語法簡潔 | 標籤規範 |
| 擴展性 | 同等 | 天生優秀 |
| 編碼難度 | 字元少,密集 | 標籤多,冗長 |
| 解碼難度 | 知結構極簡,不知結構困難 | DOM/SAX 通用但複雜 |
| 有效資料率 | 高(無閉合標籤) | 低 |
| 主場優勢 | JavaScript 原生 | 結構化標記語言標準 |
XML(含大量標籤)vs JSON(密集、機器友善)。
Eclipse RAP 貢獻者 Ralf Sternberg 僅用 10 個類實現高效輕量級庫,提升伺服器為大量客戶生成 JSON 的效率,無外部依賴,記憶體佔用極低。
