YAML 與 JSON 比較

在網頁開發與系統設定的世界裡,YAML 與 JSON 是最常被拿來比較的兩大資料格式。雖然 YAML 被設計為 JSON 的超集,但它們在設計哲學與應用場景上有著顯著的差異。

本章將帶你分析這兩者的優缺點,以及該如何根據需求做出選擇。

關鍵差異概覽

特性YAMLJSON
設計目標可讀性優化 (Human-readable)效能序列化 (Simplicity)
語法結構使用縮排 (Indentation)使用大括號 {} 與中括號 []
註解支援支援 (#)不支援 (標準規範內無)
功能複雜度高 (支援錨點、多行字串)低 (僅支援基礎資料結構)
解析速度較慢非常快
主要用途設定檔、DevOps 文件API 資料交換、瀏覽器傳輸

為什麼 YAML 適合做「設定檔」?

支援註解

這是最大的決定性因素。在設定檔中,我們經常需要解釋某個參數的作用,或是寫下注意事項。YAML 的 # 註解功能讓文件本身就能成為說明書。

對人類肉眼友善

JSON 的大括號一旦變多,括號對齊(Brace Hell)會讓閱讀變得痛苦。YAML 透過縮排讓資料層級清晰可見。

為什麼 JSON 適合做「資料交換」?

解析效率

JSON 的語法非常固定且簡單,讓電腦解析它的速度提升許多。這在處理每秒數萬次請求的 API 系統中至關重要。

瀏覽器天生支援

JavaScript 內建 JSON.stringify()JSON.parse(),這讓 JSON 成為網頁前端與後端溝通的唯一首選。

兩者的互轉

由於 YAML 1.2 相容 JSON,你可以輕鬆地在兩者間轉換。

YAML 語法:

db:
  host: "127.0.0.1"
  port: 5432

JSON 語法:

{
  "db": {
    "host": "127.0.0.1",
    "port": 5432
  }
}
小知識:大多數的 YAML 解析器可以直接讀取 JSON 格式的檔案。

如何選擇?

  • 如果你在寫...
    • GitHub Actions 工作流、Kubernetes 的 YAML、或是軟體的 config.yml
    • 請選擇 YAML
  • 如果你在寫...
    • 前端與後端溝通的 API、冷門的資料庫存儲 (Document-store)、或是需要極速傳輸的資料。
    • 請選擇 JSON

總結

YAML 是為了「人」讀寫而設計的,而 JSON 是為了「電腦」交換而設計的。雖然它們的功能有重疊,但術業有專攻,學會根據場景選擇正確的工具,才是一個專業開發者的展現。