📋
← 返回教學列表

什麼是 JSON?初學者完整指南

· 標籤: json, what-is-json, json-syntax, json-data-types, web-development

什麼是 JSON?

JSON(JavaScript Object Notation,JavaScript 物件表示法)是一種輕量級、基於文字的資料交換格式,設計目標是易於人類閱讀和編寫,也易於機器解析和生成。它最初源自 JavaScript 物件字面量語法,但後來已成為一個語言無關的標準,幾乎所有程式語言都支援它。

如今,JSON 是 Web 上資料交換的主導格式。它為 REST API、設定檔、NoSQL 資料庫、行動應用通訊和無數其他資料驅動的系統提供支援。其簡潔性和普遍性使其成為全球開發者的預設選擇。

JSON 語法規則

JSON 遵循一套嚴格且最小化的語法規則:

  • 資料以鍵/值對的形式組織
  • 所有鍵名必須是雙引號包裹的字串(不允許使用單引號)
  • 鍵/值對以冒號(:)分隔
  • 鍵/值對之間以逗號(,)分隔
  • 大括號 {} 包裹物件
  • 方括號 [] 包裹陣列
  • 不允許結尾逗號
  • 嚴格的 JSON 中不允許註解

有效的 JSON 範例

{
  "name": "Jane Smith",
  "age": 28,
  "isEmployed": true,
  "skills": ["JavaScript", "Python", "SQL"],
  "address": {
    "street": "123 Main Street",
    "city": "San Francisco",
    "zipCode": "94102"
  },
  "phoneNumbers": null
}

無效的 JSON 範例

結尾逗號(無效):

{
  "name": "Jane",
  "age": 28,
}

單引號鍵名(無效):

{ 'name': 'Jane' }

鍵名缺少引號(無效):

{ name: "Jane" }

JSON 資料類型

JSON 恰好支援六種資料類型:

| 類型 | 說明 | 範例 | |------|-------------|---------| | 字串 | 雙引號包裹的 Unicode 文字 | "Hello, world!" | | 數字 | 整數或浮點數 | 423.14-71.5e10 | | 布林值 | 邏輯真或假 | truefalse | | Null | 有意義的空值 | null | | 物件 | 無序的鍵/值集合 | {"key": "value"} | | 陣列 | 有序的值列表 | [1, 2, 3] |

明顯缺失的類型:日期、時間戳、二進位資料、undefined 和函數在 JSON 中沒有原生的表示方式。日期通常以 ISO 8601 字串的形式儲存,這是一種約定俗成的做法。

JSON 與其他資料格式的比較

JSON 與其他幾種資料交換格式並存,各有取捨:

  • JSON vs XML:JSON 更簡潔,解析速度更快。XML 支援屬性、命名空間和 schema(XSD),但明顯更加冗長。
  • JSON vs YAML:YAML 對設定檔來說更具人類可讀性,並支援註解,但其依賴縮排的語法容易出錯。JSON 更具可移植性,驗證也更嚴格。
  • JSON vs CSV:CSV 是平面且僅限表格的格式。JSON 支援巢狀階層和混合資料類型。
  • JSON vs Protocol Buffers:Protobuf 在機器對機器通訊中更小更快,但需要 schema 定義,且不具人類可讀性。

為什麼 JSON 主導了 Web API

有幾個因素解釋了 JSON 在 Web API 設計中的主導地位:

  1. 語言普遍性:每種主流語言都有原生或維護良好的 JSON 解析器,消除了整合障礙。
  2. 瀏覽器原生支援:JavaScript 的 JSON.parse()JSON.stringify() 使 JSON 成為 Web 應用程式的自然選擇。
  3. 最小頻寬消耗:JSON 的輕量級語法產生的資料量比 XML 更小,降低了延遲和頻寬成本。
  4. 人類可讀性:開發者無需特殊工具即可檢查、除錯和手寫 JSON 資料。
  5. 靈活的 schema:與 XML Schema 或 Protocol Buffers 等嚴格格式不同,JSON 可以適應不斷演變的資料結構,無需重新編譯。

常見的 JSON 使用場景

  • REST 和 GraphQL API:請求和回應資料的標準格式。
  • 設定檔:ESLint、Prettier、webpack 和 VS Code 等工具使用的格式。
  • NoSQL 資料庫:MongoDB 和 CouchDB 以類 JSON 文件的形式儲存資料。
  • 資料序列化:為儲存、傳輸或快取而結構化資料。
  • 即時通訊:WebSocket 串流和 Webhook 中的 JSON 訊息。
  • 日誌聚合:Winston、Logstash 和 Datadog 等結構化日誌工具使用 JSON 來實現可搜尋、可篩選的日誌條目。

JSON 驗證與格式化

在處理 JSON 時,驗證至關重要。一個語法錯誤——結尾逗號、缺少引號或未轉義的字元——就可能破壞整個 API 整合或設定檔。手動檢查不可靠,尤其是對於大型 JSON 文件。

如何驗證 JSON

驗證通常遵循以下步驟:

  1. 解析 JSON 字串:使用標準解析器,如 JavaScript 的 JSON.parse() 或你所選語言的等效方法。
  2. 檢查語法錯誤:解析器會在第一個違規處拋出錯誤,並附帶指出問題位置的訊息。
  3. 逐步修復錯誤:由於解析器在第一個錯誤處停止,修復它後重新驗證,直到文件通過為止。

大多數線上 JSON 工具將驗證與格式化結合在一起。貼上你的 JSON,工具會立即檢查語法,以行號和列號突顯錯誤,並生成乾淨、縮排的輸出。這比在程式碼中用解析器異常來除錯要快得多。

處理 JSON 的技巧

  • 使用前務必驗證:永遠不要假設手寫的 JSON 是有效的。
  • 使用 linter:ESLint 等工具配合 JSON 外掛可以在錯誤進入生產環境之前捕捉它們。
  • 優先使用 JSON 函式庫:使用序列化函式庫生成 JSON,而不是字串拼接,以避免微妙的語法錯誤。
  • 設定嚴格的 Content-Type 標頭:對於 API,強制使用 Content-Type: application/json 以儘早拒絕格式錯誤的請求。

使用免費的線上 JSON 驗證器和格式化工具即時檢查你的 JSON 語法、定位錯誤並格式化資料以提高可讀性。無論你是正在學習基礎的初學者,還是正在除錯生產環境 API 的經驗豐富的開發者,我們的 JSON 格式化與驗證工具都能幫助你高效處理 JSON 資料。