JSON、YAML、CSV:何時使用哪種格式及如何轉換
你下載了一個資料集,格式是 CSV。你的 API 回傳 JSON。你的設定檔是 YAML 格式。一位同事傳給你一個 JSON 檔案,要求你將其轉為試算表格式。另一位同事給了你一個 YAML 設定檔,你需要將其轉為 JSON 以供另一個工具使用。
資料格式轉換是那種看起來簡單,直到你真正動手時才發現複雜的任務。了解何時使用哪種格式,以及如何在它們之間轉換,可以節省大量的實際時間。
三種格式概覽
JSON(JavaScript 物件表示法)
{
"name": "Alice",
"age": 30,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}
是什麼: 一種支援物件(鍵值對)、陣列(有序列表)、字串、數字、布林值和 null 的結構化資料文字格式。
優點: 機器可讀、在所有程式語言中廣泛支援、自然處理巢狀資料、嚴格語法防止歧義。
缺點: 冗長(大量括號和引號)、可讀性不如 YAML、不支援註解。
YAML(YAML 不是標記語言)
name: Alice
age: 30
skills:
- Python
- SQL
- Docker
address:
city: Berlin
country: Germany
是什麼: 一種使用縮排而非括號的人性化資料序列化格式。它是 JSON 的超集,意味著有效的 JSON 也是有效的 YAML。
優點: 極易閱讀、支援註解、視覺雜訊少、非常適合設定檔。
缺點: 對縮排敏感(空格錯誤容易破壞結構)、某些令人驚訝的解析行為、解析速度比 JSON 慢。
CSV(逗號分隔值)
name,age,city,country
Alice,30,Berlin,Germany
Bob,25,London,UK
Charlie,35,Paris,France
是什麼: 一種每行代表一列、列內的值以逗號(有時是分號或定位字元)分隔的純文字格式。
優點: 通用性強(每個試算表、資料庫和資料工具都支援)、表格資料緊湊、易於閱讀和建立。
缺點: 不支援巢狀資料、無資料型別(所有內容都是字串)、特殊字元無統一標準、僅限於扁平表格。
你知道嗎? YAML 技術上是 JSON 的超集。這意味著任何有效的 JSON 文件自動也是有效的 YAML 文件。你可以將 JSON 貼入 YAML 解析器,它會正常運作。反之則不然——YAML 的特性(註解、錨點、多行字串)在 JSON 中沒有對應的功能。
何時使用哪種格式
| 使用情境 | 最佳格式 | 原因 |
|---|---|---|
| API 請求與回應 | JSON | 業界標準,每種語言都有原生支援 |
| 設定檔 | YAML | 人類可讀,支援用於文件說明的註解 |
| 試算表資料 | CSV | 可直接在 Excel、Google 試算表等工具中開啟 |
| 資料庫匯出 | CSV | 扁平表格資料直接對應到行與列 |
| 複雜巢狀資料 | JSON 或 YAML | CSV 無法表示巢狀結構 |
| 系統間資料交換 | JSON | 無歧義解析,嚴格規範 |
| 人工編輯的設定 | YAML | 更易於手工閱讀和編輯 |
| 簡單資料列表 | CSV | 輕量,無額外負擔 |
在格式之間轉換
JSON 轉 YAML
這是最常見的設定轉換。你有一個工具的 JSON 設定,需要為另一個工具轉換為 YAML。由於 YAML 支援 JSON 的所有功能,轉換很直接。
{"server": {"host": "0.0.0.0", "port": 8080}}
轉換後:
server:
host: 0.0.0.0
port: 8080
YAML 轉 JSON
從 YAML 轉到 JSON 同樣簡單,但你會失去註解(JSON 不支援),且結果更加冗長。
JSON 轉 CSV
這適用於扁平的 JSON 陣列(具有相同鍵的物件陣列)。每個物件變成一列,每個鍵變成一個欄位標題。
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
轉換後:
name,age
Alice,30
Bob,25
警告 當 JSON 包含巢狀物件或陣列時,JSON 轉 CSV 的轉換就會出問題。CSV 是扁平的——它無法表示 "skills" 陣列或巢狀的 "address" 物件。巢狀資料必須被扁平化(address.city、address.country 作為單獨的欄位)或序列化為 CSV 儲存格中的字串。
CSV 轉 JSON
每列變成一個物件,欄位標題作為鍵。對於簡單的表格資料,這種轉換很乾淨。
CSV 轉 YAML
較不常見,但遵循相同邏輯:每列變成一個 YAML 映射,整個檔案變成一個 YAML 序列。
常見陷阱
CSV 編碼問題
CSV 檔案可能使用不同的字元編碼(UTF-8、Latin-1、Windows-1252)。如果你開啟 CSV 後看到亂碼,如 "München" 而非 "München",這是編碼不相符。盡可能使用 UTF-8。
CSV 分隔符號混淆
並非所有 CSV 都使用逗號。歐洲的 CSV 通常使用分號,因為在許多歐洲數字格式中,逗號用作小數點分隔符號。定位字元分隔值(TSV)是另一種常見的變體。
YAML 縮排錯誤
YAML 使用縮排(空格,絕不用定位字元)來定義結構。不一致的縮排,或混合使用定位字元和空格,會產生解析錯誤或靜默誤判。每個縮排層級使用剛好 2 個空格,並配置你的編輯器插入空格而非定位字元。
警告 在 YAML 中,字串 no 被解析為布林值 false,yes 被解析為 true。字串 1.0 被解析為數字。如果你想要字面字串 "no"、"yes" 或 "1.0",必須加上引號:"no"、"yes"、"1.0"。這是 YAML 最惡名昭彰的陷阱之一。
JSON 尾部逗號
JSON 不允許尾部逗號。這在 JavaScript 中有效,但在 JSON 中無效:
{"name": "Alice", "age": 30,} // 無效的 JSON:尾部逗號
大型檔案效能
對於非常大的資料集(數百萬列),CSV 比 JSON 或 YAML 更有效率,因為每條記錄的額外負擔極少。JSON 為每個值添加括號和引號,對於大型表格資料會顯著增加檔案大小。
實用的轉換工具
對於快速的一次性轉換,基於瀏覽器的工具是最快的選擇。你貼上或上傳你的資料,選擇目標格式,即可立即獲得結果。
提示 即時在 JSON、YAML 和 CSV 格式之間轉換:如何轉換資料格式。貼上你的資料,選擇目標格式,複製或下載結果。
對於特別處理 JSON,一個能驗證並格式化你的 JSON 的格式化工具非常有價值:
- JSON 格式化工具 — 驗證、格式化和最小化 JSON
- JSON 轉 CSV 轉換器 — 將 JSON 陣列轉換為 CSV
- YAML-JSON 轉換器 — 在 YAML 和 JSON 之間轉換
- CSV 檢視器 — 檢視和探索 CSV 檔案
立即轉換你的資料:
所有工具均免費,直接在你的瀏覽器中運作。