Data•
2025-06-14
•8 min
•alltools.one Team
CSVJSONXMLData FormatAPI
CSV vs JSON vs XML:選擇正確的資料格式
每次資料交換都需要選擇一種格式。CSV、JSON 和 XML 是三個最常見的選擇,各有其獨特的優勢。選錯格式會導致解析問題、臃腫的資料酬載和浪費的開發時間。本指南幫助你為工作挑選正確的工具。
格式概覽
CSV(逗號分隔值)
name,age,city
Alice,30,London
Bob,25,Paris
Charlie,35,Tokyo
- 結構:扁平、表格式(列與欄)
- 型別系統:無(所有內容都是文字)
- 巢狀結構:不支援
- 大小:表格式資料中最小
JSON(JavaScript 物件表示法)
[
{"name": "Alice", "age": 30, "city": "London"},
{"name": "Bob", "age": 25, "city": "Paris"},
{"name": "Charlie", "age": 35, "city": "Tokyo"}
]
- 結構:階層式(物件、陣列)
- 型別系統:字串、數字、布林值、null、物件、陣列
- 巢狀結構:原生支援
- 大小:中等
XML(可延伸標記語言)
<people>
<person>
<name>Alice</name>
<age>30</age>
<city>London</city>
</person>
<person>
<name>Bob</name>
<age>25</age>
<city>Paris</city>
</person>
</people>
- 結構:含屬性和元素的階層式結構
- 型別系統:透過 XML Schema(XSD)定義
- 巢狀結構:原生支援
- 大小:最大(冗長的標籤)
詳細比較
| 特性 | CSV | JSON | XML |
|---|---|---|---|
| 可讀性 | 高(表格式) | 高 | 低(冗長) |
| 檔案大小 | 最小 | 中等 | 最大 |
| 解析速度 | 最快 | 快 | 最慢 |
| 巢狀結構 | 否 | 是 | 是 |
| Schema | 無標準 | JSON Schema | XSD、DTD |
| 註解 | 否 | 否 | 是 |
| 中繼資料 | 否 | 否 | 是(屬性) |
| 串流處理 | 逐行 | SAX/串流 | SAX/StAX |
| 二進位資料 | 否 | Base64 字串 | Base64 或 CDATA |
| 命名空間 | 否 | 否 | 是 |
何時使用 CSV
最適合:
- 試算表資料和資料庫匯出
- 資料分析(pandas、R、Excel)
- 欄位一致的簡單扁平資料
- 最大相容性(每個工具都支援 CSV)
- 檔案大小很重要的大型資料集
避免使用於:
- 資料有巢狀或階層結構
- 需要保留多種資料型別
- 欄位值包含逗號、換行或引號(邊界情況)
使用我們的 CSV 編輯器處理 CSV 資料,或使用 CSV 轉 JSON 轉換器進行格式轉換。
何時使用 JSON
最適合:
- Web API 通訊(REST、GraphQL 回應)
- 配置檔案(package.json、tsconfig.json)
- 文件導向資料庫(MongoDB、CouchDB)
- 瀏覽器環境(原生 JavaScript 解析)
- 結構不固定的資料(某些記錄有其他記錄沒有的欄位)
避免使用於:
- 資料純粹是表格式的(CSV 更簡單也更小)
- 你需要 XML 的功能(命名空間、schema、XSLT)
- 你需要在資料檔案中加註解(改用 YAML)
使用我們的 JSON 格式化工具格式化和驗證 JSON。
何時使用 XML
最適合:
- 企業系統(SOAP、XHTML、RSS、SVG)
- 文件標記(混合內容 — 帶有嵌入結構的文字)
- 需要在元素旁使用屬性時
- 嚴格的 schema 驗證需求(XSD)
- XSLT 轉換
- 行業專用標準(醫療 HL7、金融 XBRL)
避免使用於:
- 建構現代 Web API(JSON 是標準)
- 資料是表格式的(CSV 更簡單)
- 檔案大小和解析速度很重要(JSON 更精簡)
大小比較
相同的 1000 筆記錄資料集:
| 格式 | 檔案大小 | 解析時間(相對值) |
|---|---|---|
| CSV | 45 KB | 1x(基準) |
| JSON | 85 KB | 1.5x |
| XML | 140 KB | 3x |
XML 的冗長性 — 開始標籤、結束標籤,以及每個值都重複的元素名稱 — 使其大小大約是 CSV 的三倍。
遷移模式
CSV 轉 JSON
import csv, json
with open('data.csv') as f:
reader = csv.DictReader(f)
data = list(reader)
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
JSON 轉 CSV
import csv, json
with open('data.json') as f:
data = json.load(f)
with open('data.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
XML 轉 JSON
import xmltodict, json
with open('data.xml') as f:
data = xmltodict.parse(f.read())
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
現代格局
過去十年的趨勢非常明確:JSON 已大幅取代 XML 成為 Web API 和配置的主流。然而,CSV 在分析和商業場景中仍然是資料交換的主導格式,XML 則在企業和政府系統中持續存在。
更新的替代方案:
- YAML:人類友善的配置格式(取代 JSON 和 XML 的配置用途)
- Protocol Buffers / MessagePack:高效能系統的二進位格式
- Parquet / Arrow:大數據分析的列式格式
如需 JSON 和 YAML 的專門比較,請參閱我們的 YAML vs JSON 指南。
常見問題
在這些格式之間轉換會丟失資料嗎?
CSV 轉 JSON 對扁平資料是無損的(但型別會丟失 — 數字在 CSV 中變成字串)。JSON 轉 CSV 會丟失階層結構(巢狀物件必須被攤平)。XML 轉 JSON 大致上是無損的,但屬性和混合內容可能比較棘手。務必使用你的具體資料測試往返轉換。
新的 API 應該使用什麼格式?
JSON。它是現代 Web API 的事實標準,擁有原生瀏覽器支援、優秀的工具,以及可讀性和大小的最佳平衡。使用 JSON Schema 進行驗證。唯一的例外是當你需要整合要求 XML 的傳統企業系統時。
相關資源
- CSV 編輯器 — 編輯和清理 CSV 資料
- JSON 格式化工具 — 格式化和驗證 JSON
- CSV 轉 JSON 轉換指南 — 逐步轉換教學