什麼是 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!" |
| 數字 | 整數或浮點數 | 42、3.14、-7、1.5e10 |
| 布林值 | 邏輯真或假 | true、false |
| 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 設計中的主導地位:
- 語言普遍性:每種主流語言都有原生或維護良好的 JSON 解析器,消除了整合障礙。
- 瀏覽器原生支援:JavaScript 的
JSON.parse()和JSON.stringify()使 JSON 成為 Web 應用程式的自然選擇。 - 最小頻寬消耗:JSON 的輕量級語法產生的資料量比 XML 更小,降低了延遲和頻寬成本。
- 人類可讀性:開發者無需特殊工具即可檢查、除錯和手寫 JSON 資料。
- 靈活的 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
驗證通常遵循以下步驟:
- 解析 JSON 字串:使用標準解析器,如 JavaScript 的
JSON.parse()或你所選語言的等效方法。 - 檢查語法錯誤:解析器會在第一個違規處拋出錯誤,並附帶指出問題位置的訊息。
- 逐步修復錯誤:由於解析器在第一個錯誤處停止,修復它後重新驗證,直到文件通過為止。
大多數線上 JSON 工具將驗證與格式化結合在一起。貼上你的 JSON,工具會立即檢查語法,以行號和列號突顯錯誤,並生成乾淨、縮排的輸出。這比在程式碼中用解析器異常來除錯要快得多。
處理 JSON 的技巧
- 使用前務必驗證:永遠不要假設手寫的 JSON 是有效的。
- 使用 linter:ESLint 等工具配合 JSON 外掛可以在錯誤進入生產環境之前捕捉它們。
- 優先使用 JSON 函式庫:使用序列化函式庫生成 JSON,而不是字串拼接,以避免微妙的語法錯誤。
- 設定嚴格的 Content-Type 標頭:對於 API,強制使用
Content-Type: application/json以儘早拒絕格式錯誤的請求。
使用免費的線上 JSON 驗證器和格式化工具即時檢查你的 JSON 語法、定位錯誤並格式化資料以提高可讀性。無論你是正在學習基礎的初學者,還是正在除錯生產環境 API 的經驗豐富的開發者,我們的 JSON 格式化與驗證工具都能幫助你高效處理 JSON 資料。