JSON 轉 Excel(XLSX)工具:扁平化巢狀數據的真實原理
將 JSON 檔案轉換成 Excel(XLSX)工作表的過程,表面上只是格式轉換,實質上牽涉到數據結構的根本改變。JSON 原生支援物件、陣列、數值、布林值與 null,這種層級式(hierarchical)結構並不能直接對應到二維的試算表。這個工具的核心任務,就是將巢狀 JSON 扁平化為一張平坦表格:物件鍵值變成欄位標題,物件陣列變成列,而內嵌的鍵值會以點路徑(dot‑path)展開(例如 address.city)。轉換結果會先預覽,然後可下載成 .xlsx 檔案。
與 CSV 或 Excel 轉換不同,JSON 來源本身不是平坦的,所以「扁平化」是必經步驟。此外,目標格式 XLSX 是一個壓縮的 XML 活頁簿,能原生儲存數字與布林值類型,不會像 CSV 那樣把所有內容降級為文字。不過要注意:這個工具不會保留任何公式或儲存格樣式,只寫入 JSON 中的靜態數據。
JSON 的巢狀結構與扁平化規則
JSON 物件可以任意嵌套,例如:
{
"name": "Alice",
"address": {
"city": "Hong Kong",
"district": "Central"
},
"scores":
}
當轉換為試算表時,工具會將物件陣列視為列。如果 JSON 是一個物件陣列(例如 API 回傳的列表),每個物件對應一行。物件內部的鍵值會形成欄位,而巢狀物件的鍵會以點串接。以上例而言,會產生欄位 name、address.city、address.district。陣列 scores 怎麼辦?如果陣列本身不是物件,處理方式取決於 JSON 的頂層結構。
工具只處理第一個工作表,不會產生多個分頁。若 JSON 頂層是陣列的陣列(例如 ``),則直接視為表格式的列與行,不展開任何鍵名。
數據類型的保留:XLSX 如何勝過 CSV
CSV 會將所有數據都轉換為文字,因此數值 100 與字串 "100" 在 CSV 中無法區分。XLSX 則不同:它是一個 Open XML 格式的壓縮檔(副檔名 .xlsx 其實是 ZIP 容器),內部儲存了每個儲存格的數據類型(string、number、boolean、error、empty)。這個工具在轉換時,會將 JSON 中的數字(整數或浮點數)直接寫入 XLSX 的數值儲存格,布林值 true/false 寫入布林儲存格,null 則寫入空值(空的儲存格)。這對數據分析非常關鍵——在 Excel 中打開後,數字可以直接做加總,布林值可參與條件判斷,而不必先轉型。
但這也帶來一個陷阱:JSON 中的字串數字(例如 "123")仍會以文字型態寫入,因為工具嚴格遵守 JSON 的型別。使用者若預期自動轉型,可能產生不一致。另外,工具不支援公式,也沒有任何樣式或合併儲存格。
規範與限制:必須知道的錯誤訊息
轉換過程完全在瀏覽器端執行(client‑side),不經伺服器,保障數據私隱。但仍有嚴格限制:
- 檔案類型:此頁面僅接受單一 JSON 檔案,副檔名須為
.json。若選錯檔案類型,會出現「Choose a CSV, JSON or XLSX file.」 - 格式要求:JSON 必須是「表狀」(table‑shaped)——頂層必須是物件陣列或陣列的陣列。若 JSON 是一個純物件或純值,會顯示「This JSON is invalid or not table‑shaped.」
- 空數據:若 JSON 陣列長度為 0,顯示「This file has no table rows.」
- 規模限制:檔案最多只能有 10,000 行和 200 列。若超出上限,會分別提示「This table has more than ‹max› rows.」或「This table has more than ‹max› columns.」
- 檔案大小:檔案大小上限為 8 MB。過大則提示「This file is too large. Use a file under ‹max›.」
- 逾時機制:若轉換超過約 12 秒,工具會中斷並顯示「This conversion is taking too long. Try a smaller file.」
- 取消操作:使用者可手動取消,出現「Conversion cancelled.」
誰需要這個工具?實際應用場景
- API 數據分析員:從 REST API 取得 JSON 回應(通常巢狀很深的物件陣列),要匯入 Excel 做樞紐分析或圖表。手動寫程式展開巢狀結構費時,此工具一鍵完成。
- 配置管理人員:將系統設定檔(JSON 格式)轉為試算表供團隊成員檢視,保留數值型別避免誤解。
- 協作需求:團隊內非技術成員只會用 Excel,接收 JSON 檔案後無法直接閱讀。提供扁平化的 XLSX 表格是最低門檻。
- 數據匯入前處理:某些數據庫工具或 BI 系統接受 XLSX 但不接受 JSON,需要先轉換。
- 保留數值精確度:相比 CSV 會把
0.0001變成字串,XLSX 能保留浮點數,適合科學數據。
常見問題 FAQ
Q: 如果 JSON 中有多層巢狀陣列(陣列內有陣列),會怎樣處理?
A: 工具只會將頂層陣列視為列。內層陣列若位於物件內,其元素會以點路徑展開為多個欄位(例如 scores.0、scores.1)。若內層陣列本身是另一個物件陣列,則不會再遞迴展開,只會將整個陣列序列化為文字,這可能導致數據丟失。因此,建議自行平鋪巢狀陣列後再上傳。
Q: 轉換後 Excel 內有大量空儲存格,正常嗎?
A: 正常。由於 JSON 物件可能缺少某些鍵值,對應的欄位便會留空。XLSX 會以空的儲存格表示 null 或 undefined。
Q: 能否保留 JSON 的註解? A: JSON 規格不支援註解。工具不會解析任何非標準格式,註解會被當作語法錯誤。
Q: 轉換後的 XLSX 檔案有多大? A: 預覽畫面會顯示輸出檔案大小。一般而言,XLSX 採用壓縮 XML,體積通常小於原始 JSON(尤其是文字數據),但若含有大量數值,體積差異不大。
Q: 可以一次轉換多個 JSON 檔案嗎? A: 不可以。每次只能上傳一個檔案。若需合併多個來源,建議先自行合併成一個陣列再處理。
Q: 為什麼我的 JSON 裡面有布林值 false,但 Excel 顯示為「FALSE」文字?
A: 這表示工具已將其正確寫入為布林值。Excel 預設顯示布林值為大寫 TRUE/FALSE(或與地區設定有關)。如果看到的是字串(左對齊),可能是 JSON 中的 "false"(加引號),那就會被當作文字儲存。請檢查 JSON 原始碼中的引號。