JSON 轉 Excel 的核心機制:平展嵌套結構與點路徑命名
JSON 檔案本身允許任意深度的物件嵌套與陣列,而 Excel 試算表本質是二維表格,欄寬固定,每個儲存格只能存放一個純量值。因此,將 JSON 轉換為 XLSX 時必須套用一套固定的平展規則:物件鍵值(key)變成欄位標題,物件陣列變成資料列,巢狀物件的鍵名以點路徑展開。例如,原始 JSON 中的 address.city 會成為一個欄位名稱,其值來自 address 物件內的 city 屬性。
這種做法與 CSV 轉換不同——CSV 本身已是平面文字,無需特殊處理。而 JSON 的巢狀結構若不平展,Excel 無法直接讀取。工具只產生第一個工作表,不支援多工作表、公式或任何樣式;寫入的僅是靜態資料,不保留原 JSON 中的任何格式化資訊。
為何 JSON 轉 Excel 比 CSV 轉換更複雜:型別保留與層級攤平
CSV 把一切轉為文字字串,數字 100 與字串 "100" 在 CSV 中無區別。XLSX 格式(本質為 ZIP 壓縮的 XML 工作簿)能原生儲存數字、布林值與 null。因此,JSON 中的數字型別(如 "price": 12.5)在輸出 Excel 時會以數字儲存,而非文字;布林值 (true/false) 會以布林儲存;null 值在試算表中則顯示為空白儲存格。
但這同時帶來另一個挑戰:平展時必須決定欄位順序與遺漏值的處理。工具會根據 JSON 中第一個物件的鍵名決定欄位順序,後續物件若缺少某欄位,對應儲存格留空;若多出某欄位,則往後動態新增欄位。陣列中的陣列(array of arrays)則單純以列對應,不產生標題——這類資料通常已呈表格形狀。
輸入與輸出規格:支援的 JSON 結構與產生的 XLSX 特性
- 輸入限制:一次只能上傳一個 JSON 檔案。JSON 必須是「表格形狀」——即一個物件陣列(array of objects)或一個陣列陣列(array of arrays)。其他形狀(如單一物件、巢狀過深的物件)會觸發錯誤訊息。
- 輸出格式:唯一的
.xlsx檔案。工具會顯示預覽表格、轉換後的列數與欄數,以及輸出檔案大小。 - 型別對應(實務上遵循 XLSX 規格):
- JSON 數字 → Excel 數字(儲存格類型
n) - JSON 布林 → Excel 布林(儲存格類型
b) - JSON 字串 → Excel 字串(儲存格類型
s) - JSON null / 未定義 → 空白儲存格(無值)
- JSON 數字 → Excel 數字(儲存格類型
邊界案例與錯誤訊息詳解
依據事實表,可能出現以下錯誤(原文引用錯誤訊息,繁體化):
「請先選擇一個檔案。」(Choose one file first.)「請選擇 CSV、JSON 或 XLSX 檔案。」(Choose a CSV, JSON or XLSX file.)「此檔案過大。請使用小於 ‹max› 的檔案。」(This file is too large. Use a file under ‹max›.)「此 JSON 無效或非表格形狀。」(This JSON is invalid or not table‑shaped.)「此檔案沒有表格列。」(This file has no table rows.)「此表格超過 ‹max› 列。」(This table has more than ‹max› rows.)「此表格超過 ‹max› 欄。」(This table has more than ‹max› columns.)「轉換已取消。」(Conversion cancelled.)「此轉換耗時過長,請嘗試較小的檔案。」(This conversion is taking too long. Try a smaller file.)
其中 ‹max› 代表系統限制值,未在事實表給出確切數字,因此不可杜撰。注意最後一項錯誤是轉換逾時保護機制,並非由輸入直接導致。
誰需要這個工具:從 API 資料到試算表的實際場景
- 資料分析師:從 API 取得巢狀 JSON(如使用者資料含
profile.addresses),需快速攤平成表格進行樞紐分析或繪圖。若不寫 Python 或 jq,直接使用此工具可在瀏覽器內完成。 - 團隊協作者:收到 JSON 設定檔或資料匯出,但同事只會用 Excel 檢視。轉成 XLSX 後可直接寄送,不必要求對方安裝特殊工具。
- 資料型別敏感的使用者:需保留數字與布林值以進行公式運算或條件式格式化。若轉成 CSV,所有數字都成文字,後續處理麻煩。
- 輕量級探索:開發者想快速檢查一個 JSON 檔案的結構與樣本資料,預覽表格比閱讀原始文字直覺。
技術背景:瀏覽器端處理與 XLSX 格式簡介
轉換完全在瀏覽器端執行(client‑side),使用者檔案不會上傳至任何伺服器。這是基於 JavaScript 的 File API 與 XLSX 產生函式庫(如 SheetJS 或其他實作)。由於無後端傳輸,適合處理敏感資料,但也受限於瀏覽器記憶體——超大檔案(數十 MB 以上)可能導致逾時錯誤。
XLSX 其實是 ZIP 壓縮包,內含多個 XML 檔案(xl/sharedStrings.xml、xl/worksheets/sheet1.xml 等)。工具只寫入第一個工作表,不建立樣式、合併儲存格或公式。公式不保存,因為工具不解析或計算 JSON 中的運算式(JSON 也不含公式)。若原 JSON 中有字串形如 =SUM(A1:A10),在 Excel 開啟時仍會當作文字,不會自動轉換為公式——這是刻意設計,避免注入攻擊。
常見問答
Q: 我的 JSON 裡面有陣列陣列(array of arrays),轉換結果會是什麼?
A: 工具會直接將每個內部陣列視為一列資料,不產生欄位標題。例如 [,] 會變成兩列兩欄的表格,第一列為 1 與 2,第二列為 3 與 4。
Q: 巢狀物件裡的 key 名稱包含點(例如 "user.name"),平展後會不會混淆?
A: 會。工具以點作為分隔符,若原始 key 已包含點(例如 "user.name": "Alice"),平展後會變成 user.name 這樣一個欄位;若巢狀結構也有 user 物件內含 name,兩者欄位名稱會衝突。實務上建議先清理 JSON 中的 key 名稱。
Q: 為什麼轉出來的 Excel 裡面空白的儲存格不一定是 null?
A: 工具遇到 JSON 中的 null 值會寫入空白儲存格。若原欄位不存在(某些物件缺少該 key),同樣也是空白。因此在 Excel 中無法區分「明確的 null」與「缺少欄位」。這是平面表格的本質限制。
Q: 能否一次轉換多個 JSON 檔案?
A: 只支援一次選一個檔案。若需合併多個 JSON 為同一工作表,需先自行合併為單一陣列後再上傳。
Q: 轉換後能否保留 JSON 中的日期字串為 Excel 日期格式?
A: 不能。工具不解析日期字串,所有字串均以文字形式寫入。若需日期格式,需在 Excel 中手動設定儲存格格式或使用函數轉換。