JSON 和 XML 都是結構化資料格式,但在實際開發中的使用體驗差異很大。XML 更明確、更冗長,在一些企業系統和歷史介面裡仍然常見。JSON 更精簡、更容易閱讀,也已經成為現代 REST API、Webhook、前端應用和日誌系統的預設格式。

這裡的問題不是 XML 是否已經過時。XML 在 SOAP API、文件格式、需要命名空間的系統、混合文字標記等情境中仍然有價值。更實際的問題是:為什麼大多數新 Web API 會選擇 JSON?開發者在傳送或儲存 JSON payload 前,又應該檢查什麼?

JSON 和 XML 對比

下面是同一份使用者資料的 XML 表示:

<user>
  <id>1</id>
  <name>張三</name>
  <email>[email protected]</email>
  <active>true</active>
</user>

對應的 JSON 表示是:

{
  "id": 1,
  "name": "張三",
  "email": "[email protected]",
  "active": true
}

JSON 更短,因為每個欄位名稱只出現一次。XML 中欄位名稱通常既要出現在起始標籤裡,也要出現在結束標籤裡。對於很小的 payload,這點差異不明顯;但對於大型 API 回應,它會影響可讀性、傳輸量和除錯速度。

為什麼 API 更偏向 JSON

JSON 天然對應物件、陣列、字串、數字、布林值和 null。這些型別和 JavaScript、TypeScript、Go、Python、Java、PHP 等語言裡的基礎資料結構都很容易互相轉換。

因此 JSON 很適合:

  • REST API 請求主體和回應主體。
  • Webhook payload。
  • 前端頁面狀態初始化。
  • 工具產生的設定片段。
  • 結構化應用日誌。
  • 在瀏覽器除錯工具、終端機腳本和資料庫之間複製的資料。

JSON 也很適合瀏覽器除錯。開發者可以從 Network 面板複製回應,格式化 payload,截取一小段資料重現問題,而不需要理解額外的標記模型。

XML 仍然適合哪些情境

XML 有一些 JSON 並不打算替代的能力,比如屬性、命名空間、Schema、註解、處理指令,以及文字和結構混合的內容。這些能力在文件型資料和成熟企業系統裡仍然有意義。

XML 常見於:

  • SOAP 整合。
  • RSS 和 Atom feed。
  • Office 文件內部格式。
  • 部分支付、銀行、政務介面。
  • 文字和結構交織在一起的標記型資料。

如果資料更像一份文件,XML 可能是合理選擇。如果資料更像物件、陣列或介面訊息,JSON 通常更簡單。

JSON 的語法比 JavaScript 物件更嚴格

一個常見誤解是:看起來像 JavaScript 物件的內容,就一定是合法 JSON。實際上標準 JSON 比 JavaScript 物件字面量嚴格得多。

下面這段是合法 JavaScript,但不是合法 JSON:

{
  name: '張三',
  active: true,
}

標準 JSON 要求欄位名稱和字串都使用雙引號,而且不允許尾隨逗號:

{
  "name": "張三",
  "active": true
}

這個差別在 API 介面、資料庫 JSON 欄位、瀏覽器 JSON.parse() 中尤其重要。JSON5 和帶註解 JSON 可以用於本機設定,但在作為 API 資料傳送前,通常應該先轉換為標準 JSON。

API 除錯中常見的 JSON 問題

當介面拒絕 JSON payload 時,原因經常很小:

  • }] 前面多了尾隨逗號。
  • 字串使用了單引號。
  • 從設定檔複製時帶上了註解。
  • 物件欄位之間少了逗號。
  • API 需要數字或布林值,但 payload 裡傳成了字串。
  • 巢狀 JSON 字串沒有單獨解析。
  • 從 URL 查詢參數複製出來的 JSON 沒有先解碼。

例如下面這段看起來很清楚,但嚴格 JSON 解析會失敗:

{
  "limit": 20,
  "includeArchived": false,
}

最後一個逗號是非法的。嚴格解析器可能提示 Unexpected token },看起來像是右大括號有問題,實際原因通常是前面的逗號。

如何選擇 JSON、XML 和 JSON5

如果資料要在系統之間交換、寫入 JSON 資料庫欄位、傳送到 REST API,或交給標準函式庫解析,優先使用 JSON。

如果外部系統明確要求 XML,或者需要命名空間、Schema、文件型結構,那麼繼續使用 XML。

如果檔案主要由人維護,並且使用方明確支援 JSON5 或 JSONC,可以使用帶註解 JSON。但它不應該被當成 API payload 的預設格式。

推薦檢查流程

當你從日誌、瀏覽器除錯工具、Webhook 後台或同事那裡拿到一段 payload 時,先按這個流程檢查:

  1. 先格式化,讓物件和陣列層級清楚可見。
  2. 如果要傳給 API,確認它是標準 JSON。
  3. 檢查字串、數字、布林值、陣列和物件的型別是否符合介面要求。
  4. 如果內容來自 URL 或 Base64,先解碼再檢查。
  5. 用最小可用樣例測試介面,再傳送完整 payload。

需要快速檢查一段 JSON,可以直接使用下面的工具:

輸入JSON / JSON5 / JSONC
輸出JSON

也可以開啟完整的 JSON 格式化工具。如果 payload 來自 URL,可以先用 URL 編碼工具 解碼;如果它是透過 Base64 傳輸的,可以先用 Base64 工具 解碼,再檢查解碼後的 JSON。