JSON、YAML、CSV、Markdown 都是以文字為基礎、帶有結構的資料格式,但各自設計的目標與擅長的領域差異很大。設定檔用 CSV 會發現結構只能是扁平的,API 回應用 YAML 會失去嚴格的語法保證,表格資料用 JSON 交換則每列都要重複鍵名。Markdown 作為人類閱讀的文件格式非常優秀,但當成機器可讀的資料儲存格式時,之後會遇到解析上的麻煩。
這篇文章是一份「到底該用哪個格式」的速查表。從快速決策矩陣開始,接著功能對比表、註解支援、解析器生態系、用途別決策矩陣、常見錯誤選擇、LLM 情境下的選擇,以及規格參考資料,全部整理在一頁內。
快速決策矩陣 — 該選哪個格式
猶豫不決時,先看這張表。
| 用途 | 建議格式 | 原因 |
|---|---|---|
| REST API 請求與回應 | JSON | 語法嚴格,所有主流語言都有標準解析器 |
| Kubernetes / GitHub Actions / Docker Compose | YAML | 支援註解與錨點,縮排易於人工編輯 |
| 應用程式設定檔 | YAML(或 TOML / JSON5) | 需要寫註解說明意圖 |
| 表格資料儲存與 Excel 來回 | CSV | 可直接用試算表軟體開啟 |
| 結構化日誌輸出 | JSON Lines | 一行一筆記錄,與 grep、jq 等命令列工具相容 |
| GitHub README 與技術文件 | Markdown | GitHub、hackmd、Medium 等平台皆支援渲染 |
| 餵給 ChatGPT、Claude 的上下文 | Markdown | token 效率高,結構保留良好 |
| 靜態網站文章的 frontmatter 加本文 | YAML 加 Markdown | frontmatter 處理結構,本文處理文件 |
| 文件中以表格呈現資料 | Markdown 表格 | 純文字狀態下也可直觀閱讀 |
| 大量表格資料的批次處理 | CSV 轉 DataFrame | pandas、Polars 等函式庫可高速載入 |
簡短結論:機器之間的資料交換用 JSON,人手動編輯的設定用 YAML,二維表格資料用 CSV,人讀的文件用 Markdown。剩下的細部需求再根據下方的功能對比來調整。
先在瀏覽器中試轉 — 四種格式互轉
與其看說明,不如把同一份資料用四種格式寫出來,用眼睛直接比較差異。FormatArc 的轉換工具全部在瀏覽器本機執行,不需要上傳到外部伺服器,機密資料或 API 回應都可以直接貼上測試。
- JSON Formatter — JSON 格式化與語法驗證
- CSV to Markdown — 試算表表格轉為 Markdown 表格
- YAML to JSON / JSON to YAML — YAML 與 JSON 互轉
- CSV to JSON / JSON to CSV — 表格資料與結構化 JSON 互轉
- Markdown to HTML / HTML to Markdown — 文件格式互轉
如果你對把機密資料貼到線上轉換工具感到猶豫,可以先評估該工具是否真的會把資料傳到伺服器。FormatArc 的所有轉換都在瀏覽器中完成,資料不會離開你的分頁。
本文涵蓋的四種格式與未涵蓋的格式
本文聚焦於 JSON、YAML、CSV、Markdown 四種文字格式。這四者在現代 Web 開發、設定檔管理、資料交換與技術文件撰寫中出現頻率最高,也是 FormatArc 在瀏覽器中提供互轉工具的範圍。
以下格式不在本文範圍內:
- XML — 擁有強大的 schema 驗證機制,但語法冗長,新專案採用率持續下降。主要在 SOAP、RSS、SVG、Office Open XML 等既有系統的整合場景出現
- TOML — Rust 的 Cargo 或 Python 的 pyproject.toml 使用的設定格式。與 YAML、JSON5 用途重疊,在 Web 前端場景中出現頻率較低
- Parquet — 針對大型資料分析優化的列式(columnar)二進位格式。屬於二進位格式,不在本文文字格式比較的範圍內
- XLSX / ODS — 試算表的二進位格式。本文僅透過 CSV 匯出與匯入的路徑提及
同一份資料用四種格式寫出來
以兩筆使用者資料(姓名、年齡、技能清單)為例,分別用四種格式表達:
JSON 版本
{
"users": [
{ "name": "Alice", "age": 30, "skills": ["Python", "Go"] },
{ "name": "Bob", "age": 25, "skills": ["JavaScript"] }
]
}
YAML 版本
users:
- name: Alice
age: 30
skills:
- Python
- Go
- name: Bob
age: 25
skills:
- JavaScript
CSV 版本
CSV 無法直接表達巢狀結構,因此 skills 陣列必須在某處被「拍平」。常見做法有三種:用分隔字元(如 ;)串接、展開成多欄、或拆成獨立的表格。最簡單的分隔字元方式:
name,age,skills
Alice,30,Python;Go
Bob,25,JavaScript
Markdown 版本
Markdown 是文件格式而非資料格式,結構化的表格依賴 GFM(GitHub Flavored Markdown)的表格語法:
| name | age | skills |
|-------|-----|-------------|
| Alice | 30 | Python, Go |
| Bob | 25 | JavaScript |
同樣的資料填入四種格式後,各自特性一目了然。JSON 嚴謹、機器解析友善;YAML 人類閱讀友善;CSV 擅長二維表格但無法巢狀;Markdown 渲染後美觀但作為資料來源有侷限。
四種格式的功能對比矩陣
| 功能 | JSON | YAML | CSV | Markdown |
|---|---|---|---|---|
| 巢狀結構 | 支援(物件、陣列) | 支援(縮排) | 不支援(僅扁平二維) | 有限(巢狀清單、引用) |
| 陣列 | 支援 | 支援 | 有限(僅行單位) | 有限(清單) |
| 數字、布林值、null 型別 | 支援 | 支援(注意隱式型別轉換) | 不支援(預設皆為字串) | 不支援 |
| 註解 | 不支援 | 支援(#) | 不支援(僅非正式慣例) | 支援() |
| 字串逸出處理 | 嚴格(", \n) | 複雜(多種寫法) | 差異大(引號重複等) | 幾乎不需要 |
| 二進位資料安全 | 不支援(需 Base64 編碼) | 不支援(同左) | 不支援(同左) | 不支援 |
| 串流讀取 | 有限(JSON Lines 可用) | 有限 | 優秀(行單位串流) | 不支援 |
| 規格成熟度 | RFC 8259 (2017) | YAML 1.2.2 (2021) | RFC 4180 (2005) | CommonMark 0.31 (2024) 加 GFM |
| 手動撰寫難度 | 中等(需驗證括號與逗號) | 低 | 低(簡單情況) | 低 |
| 機器解析難度 | 低 | 高 | 中等(實作差異) | 高(解析結果為樹狀) |
| 表格資料的自然度 | 有限(鍵名重複) | 有限 | 優秀 | 優秀(表格語法下) |
| 單檔實務尺寸 | 數 MB 等級 | 數 MB | 數 GB 亦可處理 | 數百 KB |
JSON 與 YAML 共享相同的資料模型(物件、陣列、原始型別),所以互轉非常直覺。FormatArc 提供 YAML to JSON 與 JSON to YAML 雙向轉換工具。
註解支援對比
選擇設定檔格式時,能不能寫註解是最關鍵的考量之一。標準規格與衍生方言在此處行為不同:
| 格式 | 註解 | 語法 | 備註 |
|---|---|---|---|
| 標準 JSON(RFC 8259) | 不支援 | — | 寫註解會造成語法錯誤 |
| JSONC | 支援 | //、/* */ | VS Code 設定檔使用的非標準擴展 |
| JSON5 | 支援 | //、/* */ | 也允許逗號收尾與單引號 |
| YAML | 支援 | # | 標準規格,行首行末皆可 |
| CSV(RFC 4180) | 不支援 | — | 部分實作會忽略 # 開頭的行(非正式慣例) |
| Markdown(CommonMark) | 支援 | 源自 HTML 的註解語法 | |
| TOML | 支援 | # | 與 YAML 相同的 # 註解 |
標準 JSON 不支援註解,所以在設定檔中想留說明時,可以考慮 YAML、JSONC、JSON5,或使用 _comment 這類虛擬鍵名作為變通。
各語言的解析器生態系
| 語言 | JSON | YAML | CSV | Markdown |
|---|---|---|---|---|
| Node.js | JSON.parse(內建) | yaml、js-yaml | papaparse、csv-parse | marked、remark |
| Python | json(內建) | PyYAML、ruamel.yaml | csv(內建)、pandas、polars | markdown、mistune |
| Go | encoding/json(內建) | gopkg.in/yaml.v3 | encoding/csv(內建) | goldmark |
| Rust | serde_json | serde_yaml、yaml-rust2 | csv crate | pulldown-cmark |
| Java | Jackson、Gson | SnakeYAML | OpenCSV、Apache Commons CSV | flexmark、commonmark-java |
| 瀏覽器(純 JS) | JSON.parse(內建) | js-yaml(需封裝) | papaparse | marked、markdown-it |
JSON 與 CSV 在几乎所有主流語言中都有標準函式庫。YAML 與 Markdown 則依賴第三方函式庫,但各語言都有事實上的穩定選擇。FormatArc 將 yaml、papaparse、marked、turndown、remark 等函式庫打包進瀏覽器,實現了完全離線的轉換環境。
用途別推薦格式矩陣
| 使用場景 | 首選 | 替代方案 | 應避免 |
|---|---|---|---|
| REST API 請求與回應 | JSON | MessagePack、Protobuf | YAML、CSV、Markdown |
| GraphQL 查詢結果 | JSON | — | 同上 |
| OpenAPI / AsyncAPI 規格 | YAML(或 JSON) | — | CSV、Markdown |
| Kubernetes 清單 | YAML | JSON | CSV、Markdown |
| GitHub Actions / CI 管線設定 | YAML | — | CSV、Markdown |
| Docker Compose | YAML | — | CSV、Markdown |
| 應用程式設定檔 | YAML / TOML / JSON5 | — | CSV、Markdown |
| 環境變數檔案(.env) | .env / TOML | — | YAML(行尾註解解讀事故風險) |
| 結構化日誌 | JSON Lines | — | YAML、CSV、Markdown |
| 指標資料批次匯出 | CSV | Parquet | YAML、Markdown |
| Excel / Google Sheets 來回 | CSV / XLSX | — | YAML、Markdown |
| 資料庫匯入匯出 | CSV | JSON Lines | YAML、Markdown |
| 靜態網站文章 frontmatter | YAML | TOML / JSON | CSV |
| 技術部落格、GitHub README 本文 | Markdown | reStructuredText | JSON、YAML、CSV |
| 規格書、需求定義書 | Markdown | — | JSON、YAML、CSV |
| Slack / Discord 富文字 | Markdown(方言) | — | JSON、YAML、CSV |
| ChatGPT、Claude 上下文輸入 | Markdown | 純文字 | HTML |
| LLM 結構化輸出(Function Calling) | JSON | — | YAML(隱式型別轉換)、Markdown |
| AI Agent 工具定義 | JSON | YAML | CSV、Markdown |
| Markdown 表格的原始資料管理 | CSV 轉換 | — | 手動編輯 Markdown 表格 |
| README 中嵌入表格 | Markdown 表格(GFM) | — | CSV、HTML |
Markdown 表格手動編輯很麻煩,建議以 CSV 或 JSON 作為原始資料來源,再用工具轉成 Markdown 表格,維護成本會低很多。
常見的錯誤選擇
用 CSV 處理巢狀資料
像 { "user": { "address": { "city": "Taipei" } } } 這種層級結構,硬塞進 CSV 就要額外定義拍平規則,讀取時還要復原。需要巢狀結構的資料,一開始就選 JSON 或 YAML,或者拆成多張 CSV 用關聯模型處理。
YAML 的隱式型別轉換陷阱(挪威問題)
YAML 1.1 規格中,no、yes、on、off 等字串會被自動轉換為布林值。著名的「挪威問題」就是國家代碼 NO 被轉成了 false。YAML 1.2 修正了部分規則,但仍有很多解析器預設使用 1.1 相容模式。可能被誤判為布林值的字串,一律加引號包起來最安全。
country: "NO" # 安全 — 明確的字串
country: NO # 危險 — YAML 1.1 相容解析器可能轉為 false
在標準 JSON 中寫註解
VS Code 的 settings.json 可以寫註解,所以很多人誤以為 JSON 也能寫。但這是 JSONC,一個非標準的方言。標準 JSON(RFC 8259)不允許註解,JSON.parse 遇到註解會拋出錯誤。需要註解時,改用 JSON5、JSONC 或 YAML,或在預處理階段移除。
低估 CSV 的方言差異
RFC 4180 是參考規格,但實務上的 CSV 文件五花八門。分隔字元(逗號、Tab、分號)、換行碼(LF vs CRLF)、引號處理、BOM、文字編碼(UTF-8 vs Big5)、是否包含標頭列、儲存格內換行的逸出方式 — 這些在每個寫入端與讀取端的行為都可能不同。「以為只是個簡單 CSV」造成的除錯時間,可能比 YAML 的問題還多。正式投入前,務必用樣本資料驗證兩端行為。
把 Markdown 當機器可讀的資料格式
Markdown 本質上是文件格式,不是為機器穩定解析而設計的資料格式。Markdown 表格在 GFM 以外的渲染器中可能完全無法顯示,儲存格中包含管道符號或換行時更容易出錯。如果目的是機器之間的資料傳遞,應該用 JSON 或 CSV。
以為 Markdown 表格是 CommonMark 標準
它不是。表格語法屬於 GFM、MultiMarkdown 或 Pandoc 的擴展。使用 CommonMark 嚴格模式的渲染器會把表格當成普通段落顯示。GitHub、hackmd、GitLab 等平台支援 GFM,但自架的 wiki 引擎或部落格系統可能不支援。
LLM 情境下的格式選擇
餵給 ChatGPT、Claude、Gemini 等 LLM 的上下文資料,Markdown 是首選。與 HTML 相比,Markdown 去除了大量不必要的標籤與屬性,token 消耗大幅降低,同時表格、清單、代碼區塊等結構能被 LLM 準確識別。
但 LLM 的結構化輸出(Function Calling、JSON Mode)必須用 JSON。因此實務上形成了「輸入用 Markdown、輸出用 JSON」的非對稱結構。
YAML 作為 LLM 輸入有風險:縮排對 tokenizer 不夠穩定,隱式型別轉換也可能把字串變成布林值。
規格與標準歷史
| 格式 | 正式標準 | 初版 | 最新版 | MIME 型別 | 常見副檔名 |
|---|---|---|---|---|---|
| JSON | RFC 8259 / ECMA-404 | 2006(RFC 4627) | 2017(RFC 8259) | application/json | .json |
| YAML | YAML 1.2.2 | 2004(YAML 1.0) | 2021(YAML 1.2.2) | application/yaml | .yaml、.yml |
| CSV | RFC 4180 | 1970 年代(慣用) | 2005(RFC 4180) | text/csv | .csv |
| Markdown | CommonMark 0.31 | 2004(Gruber 原版) | 2024(CommonMark 0.31) | text/markdown | .md、.markdown |
| GFM | GitHub Flavored Markdown | 2017 規格化 | 持續更新 | text/markdown | .md |
JSON 與 CSV 有穩定的 RFC 規格。YAML 與 Markdown 則有方言族系(YAML 1.1 vs 1.2;CommonMark vs GFM vs MultiMarkdown vs Pandoc),跨系統整合時需要確認對端的方言。
用 FormatArc 做格式轉換
| 轉換路徑 | 工具 | 主要用途 |
|---|---|---|
| JSON 格式化與驗證 | JSON Formatter | API 回應美化、語法錯誤修正 |
| YAML 轉 JSON | YAML to JSON | 設定檔轉為 API 可處理的 JSON |
| JSON 轉 YAML | JSON to YAML | API 回應轉為可讀性好的設定檔 |
| CSV 轉 JSON | CSV to JSON | 表格資料結構化後送入 API |
| JSON 轉 CSV | JSON to CSV | API 回應轉為試算表可開啟的格式 |
| CSV 轉 Markdown 表格 | CSV to Markdown | 表格嵌入 README 或技術文件 |
| Markdown 轉 HTML | Markdown to HTML | 貼入需要 HTML 的 CMS |
| HTML 轉 Markdown | HTML to Markdown | 整理網頁內容、準備 LLM 上下文 |
串起來就是一整條工作流:「API 回應 JSON 轉 YAML 設定檔」「Excel 表格匯出 CSV 再轉 Markdown 表格貼進 README」「網頁 HTML 轉 Markdown 餵給 ChatGPT」— 全部在瀏覽器中完成,資料不離開你的電腦。
常見問題
設定檔該用 JSON、YAML 還是 TOML?
需要註解且可讀性重要時,YAML 最常用(Kubernetes、Docker、GitHub Actions 都用它)。不想處理縮排但又需要註解的話,TOML 或 JSON5 是好的替代。標準 JSON 不支援註解,不適合需要頻繁手動修改的設定檔。
REST API 能用 YAML 或 CSV 替代 JSON 嗎?
技術上可行但不建議。JSON 語法嚴格、型別明確、所有主流語言都有標準解析器,是 Web API 的事實標準。YAML 解析速度較慢且有隱式型別轉換問題,CSV 無法表達巢狀結構。
Excel 資料怎麼快速轉成 Markdown 表格或 JSON?
從 Excel 或 Google Sheets 把範圍複製成 CSV,再用 CSV to Markdown 工具即可得到對齊的 Markdown 表格。需要結構化資料餵給 API 時,用 CSV to JSON 轉換。
餵給 LLM 的資料用什麼格式最好?
文件或表格資料輸入時,Markdown 最有利 — 沒有多餘標籤、結構辨識度高。需要 LLM 回傳可程式化處理的結果時,指定 JSON 輸出。
用 FormatArc 轉換資料安全嗎?
所有轉換都在你的瀏覽器中用 JavaScript(含 WebAssembly 與本機函式庫)執行。輸入的文字或檔案不會傳送到任何外部伺服器,機密資料與個資都可以安全處理。
總結
猶豫時的終極檢查清單:
- 機器間資料交換:JSON
- 人手編輯的設定檔:YAML
- 二維表格資料:CSV
- 人讀的文件:Markdown
- LLM 輸入:Markdown / LLM 輸出:JSON
資料格式沒有絕對的對錯,只有「優化什麼」的選擇。可讀性、嚴謹度、解析器覆蓋範圍、註解支援、LLM token 效率 — 四種格式各有所長。把上面的矩陣當作決策參考,專案起步時快速定格式。
規格參考:

