首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JSON 完整指南:語法規則、資料結構、與 XML 比較及線上工具推薦

     編輯:Java 綜合教學

什麼是 JSON?

JSON(JavaScript Object Notation)是一種輕量級資料交換格式,基於 ECMAScript 子集,採用完全獨立於語言的文本格式,慣例類似 C 語言家族(C、C++、C#、Java、JavaScript、Python 等)。易於人閱讀編寫,也易於機器解析生成,常用於提升網路傳輸效率。

中文名
JavaScript 物件表示法
外文名
JavaScript Object Notation
縮寫
JSON
發音
ˈdʒeɪsən

JSON 語法規則

  • 資料以鍵值對表示
  • 資料以逗號分隔
  • 花括號 {} 保存物件
  • 方括號 [] 保存陣列

名稱/值對

"firstName": "John"

等價於 JavaScript:firstName = "John"

JSON 值類型

  • 數字(整數/浮點數)
  • 字串(雙引號包圍)
  • 布林值(true/false)
  • 陣列(方括號)
  • 物件(花括號)
  • null

基礎結構:物件與陣列

物件

{ 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 完全動態。

JavaScript 中使用 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 可輕鬆轉為字串傳給伺服器端。

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 比較

維度JSONXML
可讀性語法簡潔標籤規範
擴展性同等天生優秀
編碼難度字元少,密集標籤多,冗長
解碼難度知結構極簡,不知結構困難DOM/SAX 通用但複雜
有效資料率高(無閉合標籤)低
主場優勢JavaScript 原生結構化標記語言標準

範例對比:中國省市資料

XML(含大量標籤)vs JSON(密集、機器友善)。

JSON 校驗與線上工具推薦

  • BeJSON、SoJSON:格式化驗證、視圖模式、壓縮轉義、線上編輯、發送測試、著色、JSON-XML 互轉、JSON-VIEW 桌面工具
  • 功能:格式校驗、樹狀視圖、壓縮/轉義、線上編輯、介面測試、關鍵字著色、格式互轉

JSON 最小化實踐

Eclipse RAP 貢獻者 Ralf Sternberg 僅用 10 個類實現高效輕量級庫,提升伺服器為大量客戶生成 JSON 的效率,無外部依賴,記憶體佔用極低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved