跳至內容

JSON 轉 CSV

將物件陣列扁平化為 CSV,巢狀展開方式可調。

即時
輸入

這個工具的用途

將 JSON 物件陣列攤平為嚴格的 RFC 4180 CSV ——可設定巢狀物件的處理方式(dot / bracket / stringify)、自訂分隔符、 以及選用的標頭列。當你拿到 JSON API 回應、想倒入試算表、只吃 CSV 的 BI 工具,或一次性 COPY FROM 進 Postgres 時很實用。

輸出嚴格遵循 RFC 4180 的引號規則:含分隔符、雙引號或換行字元的儲存格 會以 "…" 包覆,內部的引號會加倍。第一列為 標頭(物件鍵依首次出現順序),之後每一列對應一個物件。不會上傳任何 資料——轉換在瀏覽器內以串流序列化器執行。

使用步驟

貼上 JSON 物件陣列(或載入範例),選擇分隔符與巢狀鍵策略(dot / bracket / stringify),即可在右側讀到 CSV。標頭列是所有鍵的聯集(依 首次出現順序);某個物件缺漏的鍵會渲染為空的引號字串。

輸入: [{"id":1,"name":"ada","email":"ada@example.com"},{"id":2,"name":"linus","email":"linus@example.com"}]

輸出(CSV):

id,name,email
1,ada,ada@example.com
2,linus,linus@example.com

限制與邊界情況

  • CSV 需要陣列(或單一物件,會被包成單列表)。 像 [1, 2, 3] 這樣的原始型別陣列會產生單欄 value 表; 根層級為純字串、數字或布林會被拒絕並回傳明確錯誤。
  • 巢狀物件依所選策略攤平。Dot(user.address.city) 為預設,符合大多數 BI 工具的預期。Bracket(user[address][city])符合 PHP / Rails 的 query string 慣例。Stringify 把巢狀值保留為 JSON 編碼的儲存格——當下游 工具能解析 JSON 儲存格(BigQuery、Snowflake、DuckDB)且你想保留 結構時很有用。
  • 物件中的陣列一律 JSON 字串化成單一儲存格——CSV 的扁平行列模型無法 在單欄中原生表達 [1, [2, 3], 4]
  • 輸出預設為不含 BOM 的 UTF-8。Windows 版 Excel 需要 BOM 才會正確 渲染 UTF-8(否則 CJK 字符與 emoji 都會亂碼);若目標受眾用 Excel, 請在選項面板開啟 UTF-8 BOM
  • 當某欄在部分列存在、部分列不存在時,缺漏的儲存格會渲染為 ""(兩個引號)。缺失值不是字面字串 null——Postgres 的 COPY FROM 會把未加 引號的空儲存格視為 NULL,這通常是你想要的行為。
  • 攤平策略與 Excel 細節的深入探討:JSON 轉 CSV:攤平巢狀資料。輸入無效 JSON 時請先用 JSON Repair

常見問題

為什麼 Excel 打開我的 CSV 變成亂碼?
Windows 版 Excel 在 CSV 不以 UTF-8 BOM(EF BB BF)開頭時,會假設使用 ANSI / 系統預設編碼。CJK 字符與 emoji 都會變成亂碼。請在選項面板開啟「UTF-8 BOM」後重新匯出;Excel 就會正確渲染。macOS Excel 與 Google Sheets 不需要 BOM。
含有逗號、引號或換行的值如何逸出?
嚴格依照 RFC 4180:任何含分隔符、雙引號、CR/LF 的儲存格會以雙引號包覆,內部雙引號會加倍(`他說 "嗨"` → `"他說 ""嗨"""`)。不含特殊字元的儲存格直接輸出,不加引號。輸出與所有遵循 RFC 4180 的 CSV parser 相容(2026 年的市場主流幾乎都是)。
若 JSON 物件之間的鍵不一致怎麼辦?
標頭列是所有觀察到的鍵的聯集,依首次出現順序。缺乏特定鍵的列會把該儲存格渲染為空的引號字串(`""`)。這與 `pandas.json_normalize()` 與 DuckDB 的 `read_json()` 行為一致——稀疏欄位保留,不會被悄悄丟掉。
可以用 Tab 當分隔符做成 TSV 嗎?
可以——在選項面板把分隔符切到 Tab。輸出技術上是 TSV(RFC 4180 不是為 tab 分隔設計的),因此含實際 tab 字元的儲存格會被加上引號;這不是每個 TSV 消費者期待的,但能通過任何 RFC 4180 風格的 parser 來回。若要正統 TSV(不加引號、cell 內 tab 視為錯誤),先做 JSON → CSV 再 `tr ',' '\t'` 替換。
如何讓空儲存格在 Postgres COPY 時被視為 NULL?
在輸入 JSON 中讓該鍵直接缺失(omit the key),並選預設攤平策略。輸出對缺漏鍵會發出未加引號的空儲存格,Postgres `COPY FROM` 會視為 NULL。JSON 中顯式的 `null` 會渲染為字面字串 `null`——若想當 NULL 匯入,請先預處理或加引號。
為什麼沒有 CSV → JSON 的方向?
CSV 攜帶的型別資訊不足以無歧義地回轉為有型 JSON。儲存格 `1` 可能是數字、也可能是長度為 1 的字串;`true` 可能是布林、也可能是字串。合理的轉換器必須逐欄詢問你,這就需要表格 UI,等於另做一個工具。不在本轉換器範圍內;具欄位型別推論的 CSV-to-JSON 工具已在 roadmap。

內容審閱者: