JSON 工具箱

JSON 和 YAML 該怎麼選

結論:JSON 用括號劃邊界、YAML 用縮排表達層級。機器互動選 JSON,人寫設定選 YAML;兩者可以互轉,但註解、錨點、多文件這些特性在轉換中會丟。

入門約 4 分鐘發佈於 2026-10-30更新於 2026-10-30
JSON 與 YAML 的適用情境對照

結論:機器之間傳輸資料用 JSON,人手動維護的設定用 YAML;需要註解、多行文字或錨點複用時優先 YAML,需要對所有語言無歧義解析時優先 JSON。

直觀對比

{
  "server": {
    "host": "127.0.0.1",
    "port": 8080
  }
}
server:
  host: 127.0.0.1
  port: 8080

同一個結構,YAML 少了幾個符號,也多了一個寫註解的位置。

差異在哪

維度 JSON YAML
層級表達 括號、逗號 縮排
註解 不支援 支援
字串 必須雙引號,需轉義 多數情況不用引號
多行文字 轉義 \n 或用陣列拼 `
重複利用 無 錨點 & 與引用 *
多文件 需要外層包陣列 --- 分隔
解析速度 快,語法簡單 慢,縮排規則複雜
歧義風險 極低 縮排錯一格、no 被當布林

最後一行是 YAML 的真正代價。country: NO 裡的 NO 在 YAML 1.1 裡是布林 false,version: 1.0 可能被解析成浮點數而不是字串。JSON 沒有這類隱式型別推斷。

具體怎麼定

選 JSON:介面請求與回應、服務間訊息、資料庫 JSON 欄位、需要多語言多工具無差別解析的資料。

選 YAML:Kubernetes、Ansible、GitHub Actions、Docker Compose 這類生態預設就是 YAML 的場景;需要寫註解解釋每個欄位;有大量多行文字(憑證、腳本、SQL)。

互轉時會丟什麼

從 YAML 轉 JSON:註解全部遺失、錨點被展開成重複內容、多文件只能保留第一個、日期與布林等隱式型別被固化。

從 JSON 轉 YAML:數字與字串的區分可能被弱化,"8080" 和 8080 都需要顯式引號才安全。

所以互轉適合「一次性遷移」或「臨時查看」,不適合把兩種格式當成同一份檔案的兩個視圖長期雙向同步。

常見問題

如何判斷一份設定該用 JSON 還是 YAML?

先看這份檔案的讀者和維護方式:由程式自動產生、跨語言傳輸、需要長期穩定解析,就用 JSON;由人手動編輯、需要解釋欄位或保存多行文字,就用 YAML。兩者可以互轉,但不建議把同一份設定長期維護成兩種格式。

為什麼 YAML 更容易出現型別歧義?

YAML 有隱式型別推斷,NO、on、1.0 這類值可能被解析成布林、日期或數字。JSON 只有顯式型別,寫字串就必須加雙引號,因此跨語言解析時更可預測。

YAML 轉成 JSON 時是否會遺失註解和錨點?

會。YAML 的註解、錨點引用和多文件結構在轉成 JSON 後無法保留,錨點會被展開成重複內容。需要保留這些資訊時,應使用支援 Document API 的 YAML 函式庫,而不是做物件往返。

延伸閱讀