將 JSON 轉為 CSV:把物件陣列扁平化

JSON 物件陣列會對應到 CSV 表格 — 每個物件一列,欄位來自所有鍵的聯集。真正的難點在於引號處理與巢狀值的處理。

物件陣列的形狀

CSV 是平面表格,所以能乾淨地轉換的 JSON 是物件陣列:每個物件對應一列,每個鍵對應一欄。

組出表頭

用所有物件鍵的聯集作為表頭,而不是只取第一個物件的鍵,這樣多鍵或少鍵的記錄都能對齊。缺少的儲存格留白即可。

引號規則

任何含有逗號、雙引號或換行的值都必須用雙引號包起來,內部的雙引號要寫成兩個,否則欄位會錯位。

巢狀值

物件與陣列沒有扁平的 CSV 形式,所以可以在儲存格裡寫成 JSON 文字(可逆),也可以攤平成 address.city 這樣帶點的欄位。

表頭順序與穩定性

對鍵的聯集排序,或把順序固定成第一筆紀錄的鍵,並把多出來的鍵追加在後面。穩定的表頭順序讓多次匯出之間的 diff 更有用,避免每次重排欄位。

日期與數字格式

試算表會很積極地重新詮釋數值:較長的數字 ID 會失去精度,ISO 日期會被改格式,前導零會消失。如果某個值必須原樣往返,要加引號;貼到 Excel 時再在前面加一個英文撇號。

與 Excel/Google Sheets 的相容性

用 CRLF 換行與 BOM(帶 byte-order mark 的 UTF-8)讓 Excel 認出 Unicode。Google Sheets 的 BOM 可有可無,但逗號分隔與雙引號跳脫的規則仍然適用。

從 CSV 轉回 JSON

用知道引號規則的方式切分每一列(不要直接以逗號 split),把第一列當作欄位名,並依欄位推斷數字、布林、ISO 日期。本工具的往返流程預設會把字串保留為字串,除非整欄都是數字。

常見陷阱

下面這些問題會讓多數 CSV 匯出爆掉。

  • 字串值裡未跳脫的逗號
  • 儲存格中出現換行卻沒有用引號包起來
  • 編碼混用(UTF-8 與 Latin-1)造成亂碼
  • 大整數(如 ID)被試算表悄悄截斷
  • 布林被存成字串 "true"/"false" 而不是 TRUE/FALSE