YAML 與 JSON 比較
在網頁開發與系統設定的世界裡,YAML 與 JSON 是最常被拿來比較的兩大資料格式。雖然 YAML 被設計為 JSON 的超集,但它們在設計哲學與應用場景上有著顯著的差異。
本章將帶你分析這兩者的優缺點,以及該如何根據需求做出選擇。
關鍵差異概覽
| 特性 | YAML | JSON |
|---|---|---|
| 設計目標 | 可讀性優化 (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。
- GitHub Actions 工作流、Kubernetes 的 YAML、或是軟體的
- 如果你在寫...
- 前端與後端溝通的 API、冷門的資料庫存儲 (Document-store)、或是需要極速傳輸的資料。
- 請選擇 JSON。
總結
YAML 是為了「人」讀寫而設計的,而 JSON 是為了「電腦」交換而設計的。雖然它們的功能有重疊,但術業有專攻,學會根據場景選擇正確的工具,才是一個專業開發者的展現。