JSON 轉 Excel 的轉換會將一組 JavaScript 物件陣列變成單一工作表的 .xlsx 活頁簿,每個物件變成一列,每個首次出現的欄位名稱變成欄位標頭。在 Python 中,標準做法是先用 json.loads() 載入陣列,再用 pandas.DataFrame.to_excel() 寫出;若需要將巢狀物件攤平,可以使用 pandas.json_normalize();若需要直接控制活頁簿的寫入,則可以使用 openpyxl。這三種做法都需要一個可運作的 Python 直譯器、安裝正確的套件,以及一支小型腳本來讀取輸入、正規化結構、寫入活頁簿,然後儲存到磁碟或串流回呼叫端。對於只需要快速交接的開發人員來說——例如一段範例 API 酬載、一份設定匯出、或是小型測試固定資料——這樣的設定是額外負擔。以瀏覽器為基礎的轉換器會在本機執行相同的「形狀轉表格」邏輯:你貼上一個非空的物件 JSON 陣列,點擊轉換,然後下載一個名為 converted.xlsx 的檔案。不需要直譯器、不需要虛擬環境、不上傳酬載,也不在產生的活頁簿中執行任何公式。

為什麼開發人員要把 JSON 轉成 Excel
JSON 是 HTTP API、內部設定檔以及分析匯出的通用語言。試算表仍然是審閱者、稽核人員、商業分析師,以及任何寧可篩選、排序、樞紐分析也不想讀大括號的人的通用語言。這兩種格式之間的轉換,是短暫存在資料最常見的開發雜務之一:交給 QA 的範例回應、送給維運的設定區塊、被產品經理審閱的一百列固定資料,或是被財務檢查的指標匯出。Python 是最受歡迎的腳本路線,因為其資料生態系成熟,但它並非唯一路線;對於一次性工作來說,啟動筆記本、匯入 pandas、寫三行程式碼所花的時間,可能會超過成果本身的價值。瀏覽器路線正是為了填補這個落差而存在——頻繁、小型、臨時性的轉換,在這種情況下安裝執行環境本身就比轉換本身還費工。
Python 方法一覽
三種 Python 工具幾乎涵蓋了所有 JSON 轉 Excel 的情境。pandas 直接把物件陣列讀進 DataFrame,再用 to_excel() 寫成 .xlsx,底層會仰賴 openpyxl 或 xlsxwriter。當來源包含巢狀結構時,pandas.json_normalize() 會把巢狀物件和陣列攤平成以點路徑命名的欄位,這雖然方便,但會產生冗長的點號分隔標頭,而下游使用者可能不想要這種命名。openpyxl 則是手動寫入活頁簿,讓你能逐格控制欄位順序、型別與樣式。每個工具都有取捨:pandas 寫入最快,但對型別推斷和巢狀結構很積極;json_normalize 對巢狀酬載很方便,但會重新命名鍵;openpyxl 精確但繁瑣。它們沒有一個能在瀏覽器分頁中執行,沒有一個能在不安裝執行環境的情況下完成轉換,也沒有一個能在不寫一支呼叫 save_workbook() 或回傳 HTTP 回應的腳本的情況下給你一個可下載的檔案。
Python 對瀏覽器轉換
對於要在寫腳本和貼進網頁之間抉擇的開發人員來說,實際的差異比語法更重要。
| 面向 | Python 腳本 | 瀏覽器轉換器 |
|---|---|---|
| 所需環境 | Python 加上 pandas、openpyxl 或 xlsxwriter | 任何現代瀏覽器,無需安裝 |
| 資料位置 | 本機檔案、標準輸入,或在原始碼中貼上的字串 | 僅在剪貼簿,絕不上傳 |
| 所需程式碼 | 數行程式加上匯入陳述式 | 無 |
| 欄位順序 | 由你在程式碼中明確控制 | 物件首次出現的鍵,從輸入決定性地產生 |
| 巢狀值 | 透過 json_normalize 或自訂遞迴攤平 | 以精簡 JSON 文字序列化至單一儲存格 |
| 輸出大小上限 | 受限於記憶體,通常很充裕 | 1,000,000 字元、10,000 列、200 欄、200,000 個儲存格 |
| 公式安全性 | 若值以 =、+、- 或 @ 開頭則有風險 | 值以純文字寫入,絕不求值 |
| 可重現性 | 腳本加上輸入檔案納入版本控制 | 重新貼上相同的 JSON 即可產生相同的活頁簿 |
對於一次性工作和小型資料集來說,瀏覽器路線是阻力較低的選項。對於重複性工作、大型資料集,或是需要具型別欄位和明確結構描述控制的管線來說,Python 腳本仍然是正確的工具。
如何在瀏覽器中將 JSON 轉成 Excel
JSON to Excel 轉換器在瀏覽器分頁內執行整個轉換流程。沒有上傳、沒有帳號、沒有伺服器端解析器,SheetJS 核心僅在你實際要求轉換時才載入,因此初始頁面保持輕量。請依照下列步驟完成一次典型的交接。
- 將一個項目皆為物件的非空 JSON 陣列貼入輸入區。頂層值必須是陣列,且陣列中每個項目都必須是物件。
- 點擊 Convert to Excel。頁面會在本機剖析陣列,物件鍵首次出現的順序會成為工作表的欄位標頭。
- 下載產生的檔案,該檔案命名為 converted.xlsx,內含單一工作表。
- 在 Excel、Google Sheets、LibreOffice Calc 或任何能讀取 OOXML 格式的應用程式中開啟 converted.xlsx,確認欄位符合你預期的鍵,順序也如你所預期。
若輸入不是有效的 JSON、是空陣列、包含基本型別項目、包含沒有任何欄位的空物件,或超過宣告的上限,工具會拒絕該輸入而不會產生部分檔案。
欄位、巢狀結構和缺失值的處理方式
本轉換器不會推斷結構描述。它會掃描陣列一次,記錄每個物件鍵首次出現的時機,並依該順序將這些鍵寫成標頭列。稍後的物件若引入新欄位,該欄位會變成附加在現有欄位右側的新欄;缺少該欄位的物件則會在對應欄位中得到一個空儲存格。字串、數字、布林值和 null 值會直接變成反映 JSON 來源的儲存格值。
巢狀物件和陣列無法在扁平的工作表中誠實地呈現,除非虛構一套欄位對應規則,因此轉換器會將它們序列化為精簡的 JSON 文字,並寫入單一儲存格。這讓結構保持可稽核——下游消費者若有需要,可以用 JSON.parse() 讀回——同時避免了會把 address.city 改名為 address_city 並遺失原始形狀的隱性攤平。剛好長得像試算表公式的值會以一般訪客文字儲存格的方式寫入;瀏覽器不會對它們求值,產生的活頁簿也不會執行公式、巨集、腳本或遠端連線。日期會保留 JSON 提供的精確值,而不是依地區顯示;因此像 "2024-03-15" 這樣的字串仍是字串,而像 1710460800 這樣的數字仍是數字。
貼上之前你應該知道的上限
工具會拒絕任何超出其公開範圍的輸入,讓失敗可見而非沉默。硬性上限為:
- JSON 輸入 1,000,000 字元。
- 陣列項目 10,000 個,在產生的工作表中計為列數。
- 相異鍵 200 個,在產生的工作表中計為欄數。
- 儲存格總計 200,000 個,在產生的工作表中以列數乘以欄數計算。
若酬載超過任何一項上限,轉換器會拒絕該輸入,而不是截斷字串、捨棄列數,或是產生部分活頁簿。對於較大的工作,實際可行的做法是將資料切成多個陣列,逐一轉換,然後在專門工具中合併產生的活頁簿——或是用 pandas 或 openpyxl 寫一支 Python 管線,由你明確控制上限並可串流輸出。此外,本轉換工具不會默默省略鍵、不會修補格式錯誤的 JSON、不會合併檔案、不會驗證商業結構描述,也不會抓取遠端 URL,且永遠不會從值的拼法推斷型別。
在交付前驗證輸出
轉換出來的活頁簿是資料的交付物,而非公式引擎;以這種心態對待它,既能保護你,也能保護接收檔案的人。請在將會消費該檔案的應用程式中開啟 converted.xlsx 一次,確認三件事:標頭順序符合你預期的欄位順序、每個預期欄位在應該有資料的列中都帶有資料,以及任何你在意的巢狀值在日後解析時能讀回有效的 JSON。若目的系統預期的是具型別的日期、依地區格式化的數字、公式、圖表、註解、驗證規則或多張工作表,請在更豐富的活頁簿模型中準備這些內容——本轉換器刻意不會虛構任何一項。請保留原始 JSON 作為資料來源,特別是在前導零字串、數值精度、null 語意或巢狀結構具有商業意義的情況下,因為活頁簿只是該來源的衍生檢視,而非取代品。
如果想在不啟動 Excel 的情況下進行快速的視覺健全性檢查,以瀏覽器為基礎的 Excel 檢視器能在本機開啟檔案而不需上傳活頁簿,也不會執行其內容;這讓它成為你把 converted.xlsx 寄給同事或貼進下游匯入工作之前的實用第二道檢查。