JSON 轉 CSV:扁平化巢狀結構到純表格的關鍵轉換
JSON 與 CSV 是兩種在本質上完全不同的資料格式。JSON 支援巢狀物件、陣列、數字、布林值與 null,而 CSV 只是一個純文字的二維表格,不具備型別、巢狀或分頁概念。本站的 JSON 轉 CSV 工具所做的,就是將這種階層式、具型別的資料「壓平」成一個無型別的平面表格。所有的處理都在你的瀏覽器中執行,沒有任何資料被上傳到伺服器。
扁平化機制:Dot-Path 標記法與陣列展開
當你上傳一個符合「表格形狀」的 JSON 檔案時(這點稍後說明),轉換器會自動選用最常見的扁平化策略:以點路徑(dot-path notation)表示巢狀物件的鍵名。例如,一個包含 address 物件的 JSON 物件:
{
"name": "王小明",
"address": {
"city": "台北市",
"zip": "100"
}
}
在 CSV 中會變成兩欄:name 與 address.city、address.zip。每個物件變成一個列,物件鍵變成欄位名稱,巢狀層級用句點串接。若 JSON 是陣列的陣列(array of arrays),則每個內部陣列直接成為一列,元素依序填入欄位,不會產生物件鍵。
這種扁平化會永久破壞巢狀結構:你無法從 CSV 還原原始的 JSON 物件層次。所有原本的型別(數字、布林值、null)都會被轉成字串。例如布林值 true 變成字串 "true",數字 123 變成 "123",null 變成空值或字串 "null"(取決於 CSV 工具後續的解讀)。更常見的困擾是前導零的遺失:"001" 若被辨識為數字在 JSON 中就是 1,但 CSV 中的 001 會被多數試算表軟體自動去掉前導零,變成 1。
輸入格式限制:JSON 必須是「表格形狀」
此工具不接受任意結構的 JSON。它只處理兩種形狀的資料:
- 單一陣列的物件:
[{"a": 1}, {"a": 2}] - 陣列的陣列:
[,]
若 JSON 是單一物件({"a": 1})、巢狀混合結構、或不合法的 JSON 語法,工具會顯示錯誤訊息:「This JSON is invalid or not table‑shaped.」。這是因為 CSV 只能表達平坦的二維表格,沒有欄位層級概念。如果你需要轉換非表格形狀的 JSON,必須先在來源端進行扁平化或正規化。
分隔符號、引號規則與 CSV 輸出設定
CSV 的「C」代表逗號,但實際上分隔符可以自訂。本工具提供三種選項:逗號(,)、分號(;)或定位點(Tab)。選擇分號常見於歐洲語系區域,因為逗號常被用作小數點。定位點則適合欄位內容可能包含逗號或分號的資料。
由於 CSV 沒有跳脫字元的通用標準,工具會自動為包含分隔符號、雙引號或換行符號的值加上雙引號,並將值內的雙引號重複為兩個雙引號("")。例如值 "他說"你好" 會變成 "他說""你好""。這符合 RFC 4180 規範,但若下游軟體不使用此標準,可能造成欄位錯位。
轉換完成後,頁面會顯示一個預覽表格、列數與欄數,以及產出檔案的大小。你可以在下載前確認資料是否正確。
邊界案例與錯誤處理
工具設有明確的限制與對應的錯誤訊息:
| 情況 | 錯誤訊息 |
|---|---|
| 未選取檔案 | Choose one file first. |
| 非支援格式(CSV/JSON/XLSX,此頁僅 JSON 相關) | Choose a CSV, JSON or XLSX file. |
| 輸出格式選錯(例如選到 XLSX) | Choose a different output format. |
| JSON 解析失敗或非表格形狀 | This JSON is invalid or not table‑shaped. |
| 檔案超過大小上限 | This file is too large. Use a file under ‹max›.(‹max› 為實際上限值) |
| 表格超過最大列數 | This table has more than ‹max› rows. |
| 表格超過最大欄數 | This table has more than ‹max› columns. |
| 轉換過程被使用者取消 | Conversion cancelled. |
| 轉換超過預期時間 | This conversion is taking too long. Try a smaller file. |
| 無法轉換(其他內部錯誤) | Could not convert this file. |
所有處理都在客戶端完成,因此即使檔案包含敏感資訊(如 API 金鑰、個人資料),也不需擔心資料外洩。
誰需要這個工具
- API 回應處理者:許多 Web API 回傳 JSON 格式資料,但分析人員需要 CSV 才能匯入 Excel、Google Sheets 或資料庫。此工具能快速將
[{...}, {...}]陣列轉成可匯入的 CSV。 - 重視隱私的工作流程:若你無法將資料上傳到第三方服務,這款完全離線的轉換器是安全選擇。
- 跨語言環境工作者:需要產生分號分隔的 CSV 以符合歐洲本地化設定時,可直接指定分隔符。
- 快速原型開發者:在資料管線中臨時需要將 JSON 試算化,不用寫 Python 或 jq 指令,拖放即可。
常見陷阱與注意事項
- Type round‑trip 不可能:CSV → JSON 轉換無法還原原始型別。從 CSV 再轉回 JSON 時,所有值都會是字串,數字
100會變成"100",需要手動修正。 - 巢狀結構的保留決策:如果你需要保留完整巢狀結構,此工具不適合。你必須在轉換前決定如何扁平化(例如使用點路徑、陣列索引、或合併為 JSON 字串欄位)。預設點路徑是一般通用的折衷方案。
- 前導零遺失:若 JSON 中的數字是
"001"(字串),則 CSV 中仍為001;若 JSON 中的數字是1,CSV 中為1。但 Excel 打開 CSV 時可能會將001(文字)自動轉為數值1,這是下游軟體的行為,不在本工具控制範圍內。 - 換行符號在欄位中:若某個 JSON 字串值包含
\n,CSV 會正確引用並保留換行,但某些老舊 CSV 解析器可能無法處理跨列的值。
常見問題 FAQ
Q: JSON 內有多個陣列(例如兩個獨立的陣列物件),可以一次轉換嗎? A: 不行。工具僅接受單一陣列(array of objects 或 array of arrays)。若有多個頂層陣列,請先合併為一個,或分批處理。
Q: 為什麼我的數字「001」變成「1」? A: 這是兩個層面的問題。若 JSON 中的 "001" 是字串(用雙引號包裹),CSV 會保留它;若 JSON 中是數值 1(無引號),則 CSV 輸出為 1。但即使 CSV 正確輸出 "001",Excel 或 Google Sheets 打開時仍可能自動捨去前導零,這屬於試算表軟體的資料類型推斷行為。建議在試算表中手動將該欄格式設為「文字」。
Q: 可以用 pipe (|) 或自訂分隔符號嗎?
A: 目前工具僅支援逗號、分號與定位點三種選項,無法使用自訂分隔符。
Q: CSV 中巢狀欄位名稱太長(如 data.results.info.title),可以簡化嗎?
A: 工具採用自動點路徑扁平化,無法由使用者自訂欄位命名規則。如有需要,請在轉換前修改 JSON 的鍵名(例如將巢狀鍵提前展開)。
Q: 轉換非常慢,怎麼辦? A: 提示「This conversion is taking too long. Try a smaller file.」表示檔案過大或結構過於複雜。請減少 JSON 中的物件數量或巢狀深度。此工具為瀏覽器端處理,效能取決於你的裝置。
Q: JSON 中包含 null 值會怎麼處理?
A: null 會被轉為空字串(CSV 中連續兩個分隔符號表示空值),不會寫入文字 "null"。如果希望明確寫出 "null",需要先在 JSON 中將值改為字串 "null"。