JSON (JavaScript Object Notation) 與 YAML (YAML Ain’t Markup Language) 是近年來最常被拿來比較的兩大格式。
簡單來說:JSON 是給機器看的,而 YAML 是給人看的。
JSON 和 YAML 核心差異對比
| 特性 | JSON (JavaScript Object Notation) | YAML (YAML Ain’t Markup Language) |
|---|---|---|
| 可讀性 | 中等(使用大量括號與引號,層級過深時較混亂) | 極高(使用縮排表達層級,像文章一樣清爽) |
| 語法嚴謹度 | 高(格式要求嚴格,錯誤會直接導致解析失敗) | 中(對縮排非常敏感,需要精確但語法較簡潔) |
| 支援註解 | 不支援(標準規範內不包含註解功能) | 支援(使用 # 符號) |
| 資料類型 | 基礎(字串、數字、陣列、物件、布林值、null) | 豐富(除基礎型態外,支援時間、二進位、自定義類型) |
| 解析速度 | 快(結構簡單,機器解析效能極高) | 慢(語法複雜,解析時較耗費計算資源) |
| 主要用途 | Web API 資料傳輸、前端系統互動 | 軟體設定檔(如 Docker, Kubernetes, CI/CD 流程) |
語法對比實例
假設我們要表達一本書的資訊,兩者的寫法如下:
JSON 範例
JSON 強調結構的完整性,所有的鍵(Key)都必須用雙引號包裹。
JSON
{
"book": "Deep Learning",
"tags": ["AI", "Tech"],
"published": 2024,
"available": true
}
YAML 範例
YAML 捨棄了花括號和引號,利用「縮排」來表達層級,視覺上非常清爽。
YAML
book: Deep Learning
tags:
- AI
- Tech
published: 2024
available: true
# 這是 JSON 做不到的註解功能
該如何選擇?
- 💡 選擇 JSON 的時機:
- API 溝通:
- 機器對機器 (M2M):
- 對效能有要求:
- 💡 選擇 YAML 的時機:
- 設定檔 (Config):
- 需要寫註解:
- 複雜層級:
- 💡 潛在的小陷阱
- YAML 的縮排:
- JSON 的註解:
JSON 是 Web 開發的標準語言,幾乎所有程式語言都有極速的內建解析器。
當資料只需要在系統間傳遞,不需要人類頻繁修改時。
處理大規模數據時,JSON 的解析效率遠高於 YAML。
例如 GitHub Actions、Kubernetes 或 Docker Compose,因為人類需要閱讀並維護這些檔案。
如果你希望說明某個參數為什麼要這樣設定,YAML 是唯一選擇。
當設定層級很深時,YAML 的縮排格式比 JSON 的層層大括號更容易對齊。
YAML 對空格非常敏感,如果你混用了 Tab 和空白鍵,可能會導致解析出錯。
雖然有些工具(如 VS Code 的 jsonc)允許在 JSON 寫註解,但這並非標準,換個環境可能就會失效。