第二章: JSON 語法

2-1 JSON 以 JavaScript 的物件實字為基礎。

實字 ( literal ) :是實際以資料表示的值,它以準備被解釋的方式精確寫出。

資料交換的重點是資料,因此 JSON 並未包含 JavaScript 的物件實字的函式。JSON 引用 JavaScript 物件實字的方式純粹只以語意表示物件實字與其屬性,屬性的表示以 名稱:值對展現。

範例:以 JSON 描述我現在所穿的鞋子

{
    "brand": "Crocs",
    "color": "Pink",
    "size": 9,
    "hasLaces": false
}

2-2 名稱 - 值對

名稱 - 值對的概念廣泛用於電腦,有時稱為鍵 - 值對、屬性 - 值對或欄位 - 值對,本書一概稱為名稱 - 值對。

就是我們常講的 Key : value

在 JSON 的名稱 - 值對中,值可以是numberbooleannullarrayobject
JSON 使用冒號()來分隔名稱與值,名稱永遠在左側而值永遠在右側。

2-3 JSON 的正確語法

JSON 所使用的名稱 - 值對在很多系統中是很好用到資料結構。在名稱中使用空格或特殊字元(a-z0-9之外的字元)或許沒有考慮到可攜性,因此避免空格或特殊字元對可攜性很重要。

可攜性:我們在第一章將此詞彙定義為 “以系統雙方都可以接受的方式在兩者間轉移資訊”。

JSON 的名稱 - 字元對中,名稱若被系統當作物件仔入記憶體則會成為 ”屬性“。在某些系統中,屬性可以包括底線字元(_)或數字,但大部分情況下最好保持使用 A-Za-z 等字母字元。因此若想要在名稱中使用多個字詞,可以設置成如下:

{
    "lindsaysAnimal": "cat",
    "myAnimal"
}

名稱 - 值對中不同的是值並不一定是用雙引號,若值是字串資料型別,我們必須使用雙引號。JSON 其餘的資料型別則不會以雙引號包圍。

JSON 物件前後都需要加上大括號 { } 如上表示。

製作 JSON 時,想像授封騎士的典禮,國王用劍點在新騎士的兩肩上。你是國王,而你必須以大括號點在 JSON 物件的兩邊。"朕封你為 JSON 騎士 物件"

另一種檢視 JSON 語法的方式是透過讀取它的機器的觀點來看。與人類不同,機器是非常依賴規則與指令的生物(?)。當你在非字串值(沒有使用雙引號包圍)中使用下列任何字元時就表示提供資料如何讀取的指示:

  • { (左大括弧)表示 “物件的開始”
  • } (右大括弧)表示 “物件的結束”
  • [ (左方括號)表示 “陣列的開始”
  • ] (右方括號)表示 “陣列的結束”
  • : (冒號)表示 “分隔名稱 - 值對中的名稱與值”
  • , (逗號)表示 “分隔物件中的名稱 - 值對”“分隔陣列中的值” ; 也可以讀作 “下面還有”

如果你忘記以右括號表示“物件的結束”,則物件不會被辨識成物件。如果你在名稱 - 值對清單最後加上逗號,則表示“下面還有”,但其實沒有,這是必須要更正的語法。

2-4 語法檢驗

運用 JSON 時,檢驗很重要。
有許多線上工具可以檢驗 JSON ,搜尋 "JSON validation" 會有很多結果,下面幾項值得關注:

  • JSON Formatter & Validator
    • 有選項的格式化工具,漂亮的 UI 可標示出錯誤。經過處理的 JSON 顯示在樹狀結構視窗中,有一個視窗可以讓你複製處理過的程式碼。
  • JSON Editor Online
    • 整合 JSON 檢驗、格式化與視覺展示的工具。錯誤指示器顯示於有錯的程式行。檢驗時會提供有用的解釋錯誤資訊。視覺化工具可以樹狀結構顯示你的 JSON。
  • JSONLint
    • 不囉唆的 JSON 檢驗工具,複製、貼上、按下 "validate" 就可以。它也會貼心的將你的 JSON 格式化。

2-5 JSON 文件

JSON 作為一種資料交換格式,也可以作為獨立的文件並儲存於檔案系統。

副檔名就是很容易記得的: .json

2-6 JSON 的 MediaType

傳遞資料給他人時經常需要提前告訴對方它的型別,你可能聽過網路上的媒體型別內容型別或稱為 MIME 型別。此型別格式為 type/subtype,其中一種你可能見過的是 text/html。

JSON 的 MIME 型別是 application/json

Internet Assigned Numbers Authority ( IANA ) 有媒體型別的清單。

接著下一章要討論的事 JSON 的資料型別。 Continue 繼續 →