JSON、YAML、XML 怎麼選?三種資料格式比較
寫程式、串接 API、設定伺服器時,一定會碰到 JSON、YAML、XML 這三種格式。它們都是用「純文字」描述結構化資料的方法,但設計理念與擅長的領域各不相同。這篇文章用同一份資料做比較,帶你了解什麼時候該用哪一種。
同一份資料,三種寫法
假設要描述一本書的資料:
JSON
{
"title": "資料格式入門",
"price": 450,
"inStock": true,
"tags": ["程式", "入門"]
}
YAML
# 書籍資料
title: 資料格式入門
price: 450
inStock: true
tags:
- 程式
- 入門
XML
<book inStock="true">
<title>資料格式入門</title>
<price>450</price>
<tag>程式</tag>
<tag>入門</tag>
</book>
一眼就能看出差異:JSON 用大括號與引號,結構明確;YAML 用縮排表示層級,最簡潔;XML 用成對的標籤,最冗長但也最嚴謹。
JSON:程式與 API 的通用語言
JSON(JavaScript Object Notation)源自 JavaScript,但現在幾乎所有程式語言都內建支援。它只有六種資料型別:字串、數字、布林值、null、陣列與物件,規則簡單到幾乎不會有歧義。
- 優點:解析速度快、各語言支援完整、網頁前端可以直接使用。
- 缺點:不能寫註解;最後一個項目後面不能多加逗號;手寫時引號和括號容易漏。
- 常見用途:REST API 回應、前端設定檔(package.json)、NoSQL 資料庫、資料交換。
YAML:給人讀寫的設定檔
YAML 的設計目標是「人類容易閱讀」。它用縮排取代括號,可以寫註解,還支援多行文字、錨點引用等進階功能。實際上 JSON 幾乎可以被視為 YAML 的子集,大多數合法的 JSON 也是合法的 YAML。
- 優點:簡潔易讀、支援註解、適合手動編輯。
- 缺點:縮排錯一格就會改變意思;部分值會被自動判斷型別而出乎意料,例如舊版規範中
no可能被當成布林值 false、1.10會被當成數字 1.1。 - 常見用途:Docker Compose、Kubernetes、GitHub Actions、Ansible 等設定檔。
XML:嚴謹的文件標記語言
XML(eXtensible Markup Language)比另外兩者歷史更久,原本是為了標記「文件」而設計。它有屬性與子元素兩種表達方式,搭配 XSD 綱要可以嚴格驗證資料是否正確,並有命名空間等機制處理複雜文件。
- 優點:可嚴格驗證、適合混合文字與結構的文件、工具成熟。
- 缺點:冗長、檔案較大、解析較慢。
- 常見用途:RSS 訂閱、SVG 圖片、Office 文件內部(DOCX、XLSX 其實就是壓縮的 XML)、Android 版面、許多企業與政府系統的資料交換。
比較總表
| JSON | YAML | XML | |
|---|---|---|---|
| 可讀性 | 中 | 高 | 低 |
| 註解 | 不支援 | 支援(#) | 支援(<!-- -->) |
| 資料型別 | 內建 6 種 | 自動判斷,較豐富 | 全部是文字,靠綱要定義 |
| 屬性 | 無 | 無 | 有 |
| 檔案大小 | 小 | 最小 | 大 |
| 適合 | 程式之間傳資料 | 人手寫設定 | 文件與嚴格驗證 |
互相轉換要注意什麼?
- YAML → JSON 會失去註解:JSON 沒有註解語法,轉換後所有
#註解都會消失。 - XML 的屬性怎麼表示:JSON 和 YAML 沒有「屬性」的概念,常見慣例是在名稱前加上
@,本站工具也採用這個規則,因此可以來回轉換。 - XML 沒有型別:XML 裡的
450只是文字,轉成 JSON 時會是字串"450",需要的話要在程式中自行轉成數字。 - 單一項目與陣列:XML 中只有一個
<tag>時,轉成 JSON 會是單一值;有兩個以上才會變成陣列。寫程式讀取時要考慮這兩種情況。 - CSV 只能表示表格:巢狀結構轉成 CSV 時,內層資料會以 JSON 文字放在儲存格裡。
怎麼選?
簡單的判斷原則:給程式讀的用 JSON,給人改的用 YAML,需要和既有系統或標準對接的用 XML。實務上你不一定能選擇——對方的 API 用什麼格式,你就得處理什麼格式。這時候可以用本站的資料格式轉換工具,貼上文字就能即時轉換,也方便用來檢查格式有沒有寫錯。