Excel 打不開 JSON,但可以匯入它
雙擊 .json 檔案不會得到一張表格。Excel 沒有 JSON 檢視器,這種格式也沒有它能直接顯示的行列。
Excel 有的是 Power Query——一層理解 JSON 結構、能把資料重組成表的資料匯入與轉換引擎。它真的擅長這件事,但也比多數人預期的更費手:每一層巢狀都要自己展開。
本指南講完整條匯入路徑,也直說它什麼時候是錯誤選擇。
開始之前:先確認你的版本
Power Query 的可用性並不統一,這一點絆倒的人比任何操作步驟都多:
| 版本 | 狀態 |
|---|---|
| Excel 2016 及之後,Windows | 內建,在「資料」索引標籤 |
| Excel 2010 / 2013,Windows | 需要單獨安裝 Power Query 增益集 |
| Excel for Mac | 支援較晚,連接器比 Windows 少 |
| Excel 網頁版 | 受限,查詢編輯能力不等同於桌面版 |
不同發行版的功能表措辭也會變。如果下文的路徑在你的功能區裡對不上,找「取得資料」「Get & Transform」或「新增查詢」——同一個功能在不同版本下的不同名字。
第 1 步:載入檔案
在「資料」索引標籤:取得資料 → 從檔案 → 從 JSON,選取檔案。
Excel 不會往儲存格裡放任何東西。它開啟的是 Power Query 編輯器——一個獨立視窗,顯示文件的頂層結構。
多數人在這裡遇到第一個意外:什麼都還沒匯入。Power Query 是一塊暫存區,只有當你點完「關閉並載入」,資料才會進工作表。
第 2 步:看懂眼前的結構
Power Query 用自己的詞彙描述 JSON:
- Record —— 一個 JSON 物件
{...} - List —— 一個 JSON 陣列
[...] - 其他 —— 普通值
一個典型的介面回應以單一 Record 開啟,欄位類似 data、page、total。你的資料列在 data 裡,顯示為一個 List。此刻什麼都不可讀,這是正常的。
真正幹活的是兩個動作,你會反覆用到:
轉換成資料表把 List 變成列,用在裝著記錄清單的那個 List 上。
展開控制項——欄首裡那個雙向小箭頭圖示——把 Record 的欄位或 List 的元素變成真正的資料。
第 3 步:找到你的記錄
編輯器裡如果是一個帶 data、page、total 的 Record,點 data 欄位鑽進去,得到一個 Record 組成的 List。
點轉換成資料表,對話方塊保持預設。得到單欄(通常叫 Column1),每個儲存格都寫著 Record。
這一欄黑箱是正常的。每個儲存格是你的一條 JSON 物件,還沒拆開而已。
第 4 步:反覆展開
點 Column1 的展開圖示。Power Query 列出它找到的欄位,讓你勾選要帶出哪些。
取消勾選「使用原始欄名作為前置詞」,除非你想要每一欄都叫 Column1.id、Column1.name。勾一次是輕度煩惱;巢狀四層還勾著,欄名就沒法看了。
點確定後,Record 欄被替換成一欄一個欄位。
現在檢查結果:凡是本身是物件的欄位顯示為 Record,是陣列的顯示為 List。每一種都要再來一輪展開。四層深的結構就是四輪。
展開 Record 欄
同一個控制項、同一個對話方塊:勾欄位、去前置詞、確定。巢狀物件很好辦——欄位名固定,產出的欄也固定。
展開 List 欄
List 給你一個選擇,而且選擇很關鍵:
展開至新資料列把父列依元素複製。一個帶三個標籤的客戶變成三列,除了標籤全部相同。想要「每個元素一列、之後樞紐」時這是對的;把物件陣列拆成子表也是這條路:先展開至新列,再展開得到的 Record 欄。
擷取值保持一列,把元素用你選的分隔符號拼進一個儲存格。陣列只是幾個標籤、想讓表格保持一列一筆記錄時,用這個。
沒有第三種選項能把陣列以 JSON 文字塞進儲存格——想要那個,Power Query 就不是工具了。
同一個查詢裡對多個 List 欄都要「展開至新資料列」時要小心:展開兩個獨立陣列會產生笛卡兒積——三個標籤 × 四張訂單 = 十二列,多數沒有意義。一個查詢只展開一個陣列,或拆成多個查詢之後再關聯。
第 5 步:修類型
Power Query 會猜欄類型,而且猜錯得足夠頻繁,值得每次都檢查。類型標示在每個欄首。
兩個要專門盯的問題:
數字被匯入成文字就求不了和。把欄類型改成小數或整數。
長 ID 丟尾巴。 16 位以上的識別碼沒法被精確表示成數字。Power Query 若把這種欄猜成數字,末幾位會靜默地變成 0——不報任何錯。載入前把欄類型設為文字。訂單號、雪花 ID、帳號都算在內,這是整個流程裡破壞力最大的預設行為。
日期也要查。JSON 通常帶 ISO 8601 字串,Power Query 一般能識別;Unix 時間戳到貨時是普通整數,需要轉換。
第 6 步:關閉並載入
常用 → 關閉並載入,結果以真正的 Excel 表格落進工作表。
查詢隨活頁簿儲存。「資料 → 全部重新整理」會對目前檔案或 URL 重跑全部步驟。這就是用 Power Query 的全部理由:轉換是可重複的,不是一次性貼上。
直接從介面匯入
取得資料 → 從其他來源 → 從網路,貼上介面位址,之後是同一套展開與修類型。
公開介面很好用。涉及驗證就迅速變尷尬:自訂要求標頭和 POST 要在進階編輯器裡手寫 M 語法,而存在活頁簿裡的憑證在檔案被分享時是真實的安全問題。一次性驗證請求,用用戶端拿到回應檔案再轉換通常更省事也更安全。
什麼時候不該用 Power Query
Power Query 靠重複攤薄學習成本。任務不重複,成本就是純開銷。
用 Power Query:
- 來源檔案或 URL 會變,想點重新整理就更新
- 活頁簿是別人也要開啟的週期性報表
- 要把 JSON 與活頁簿裡已有的表做關聯
- 轉換本身需要可稽核、可重現
先轉 .xlsx:
- 資料只要用一次
- 巢狀很深,手工展開意味著幾十次點擊
- 想在進活頁簿之前先看結果表
- 所在平台的 Power Query 對 JSON 支援有限
對一個巢狀檔案的老實話:能自動找到陣列根、一次攤平所有層級的轉換器,完成時間大約等於 Power Query 裡點完兩個展開對話方塊。
一次性檔案的更快路徑: 本站的 JSON 轉 Excel 工具會自動識別記錄陣列、一次展平全部巢狀物件、把物件陣列匯出到獨立工作表,直接下載 .xlsx。全程在瀏覽器裡執行,檔案不上傳——不適合貼進雲端服務的資料同樣能用。
Power Query 常見問題
每個儲存格都是 Record 或 List。 結構還沒展開。對那一欄用展開控制項。
欄名長成 Column1.data.address.city。 展開時前置詞選項沒去掉。重新命名欄,或取消勾選重做展開。
列數莫名其妙變多。 兩個 List 欄都被展開至新列,產生了笛卡兒積。一個查詢只展開一個陣列。
某欄求不了和。 類型是文字。改欄類型。
ID 結尾變成 0。 15-16 位以上整數被設成了數字類型。把欄改回文字再重新整理。
檔案挪了位置後重新整理失敗。 查詢存的是絕對路徑。在「查詢設定」裡更新來源,或用固定位置。
有些列整欄是空的。 JSON 記錄本身不均勻。這是資料的樣子,不是 bug——Power Query 用它遇過的欄位湊出欄集合。
三種方法怎麼選
| Power Query | 線上轉換 | Python | |
|---|---|---|---|
| 準備工作 | 有 Power Query 就為零 | 無 | 環境加函式庫 |
| 深層巢狀 | 行,每層手工一步 | 行,自動 | 行,寫程式 |
| 可重新整理 | 是 | 否 | 是,配排程 |
| 物件陣列到獨立工作表 | 手工,一個陣列一個查詢 | 自動 | record_path |
| 資料離開本機 | 否 | 工具上傳才會 | 否 |
| 適合 | 週期報表 | 一次性檔案 | 資料管道 |
常見問題
Excel 能直接開啟 JSON 檔案嗎?
不能當作表格開啟。雙擊 .json 不會出現行列結構,走「檔案 → 開啟」通常只能看到原始文字或匯入提示。受支援的路徑是「資料 → 取得資料 → 從檔案 → 從 JSON」,它把檔案載入 Power Query 而不是工作表,之後還要把結構轉成表格、逐層展開巢狀,最後才會落到工作表裡。
Power Query 的「從 JSON」入口在哪裡?
在較新版本的 Windows Excel 裡,位於「資料」索引標籤的「取得資料 → 從檔案 → 從 JSON」。可用性隨版本與平台不同:Windows 上 Excel 2016 及之後內建,2010/2013 是獨立增益集,Excel for Mac 支援較晚且連接器較少。找不到入口時先確認版本,再懷疑檔案。
為什麼我的 JSON 顯示成 List 或 Record,而不是資料?
這是 Power Query 在表示尚未展開的結構:Record 對應 JSON 物件,List 對應 JSON 陣列。對頂層的 List 用「轉換成資料表」,再對 Record 欄用展開控制項把欄位變成真正的欄。每一層巢狀都要單獨展開一次,這也是深層巢狀 JSON 點起來很累的原因。
Power Query 裡怎麼展開巢狀 JSON?
點擊欄首的展開圖示。Record 欄可以勾選要帶出的欄位;List 欄要在兩種方式裡選:「展開至新資料列」把父列依元素複製成多列,「擷取值」把元素用分隔符號拼進一個儲存格。每層重複一次,並取消勾選「使用原始欄名作為前置詞」,避免得到 data.address.city 這種欄名。
該用 Power Query,還是先把 JSON 轉成 .xlsx?
需要日後從同一檔案或 URL 重複重新整理、活頁簿是週期性報表、或要把 JSON 與活頁簿裡已有的表做關聯時,用 Power Query。只用一次、巢狀深到手工展開很繁瑣、或想在進活頁簿前先檢查結果表時,先轉 .xlsx 更快。
Power Query 能直接從 API 位址拉 JSON 嗎?
可以,走「取得資料 → 從其他來源 → 從網路」並填入介面位址。需要驗證標頭或 POST 要求內容的場景會明顯變難,往往要手寫 M 語法;一次性驗證請求通常先用用戶端拿到回應檔案再轉換更省事。
相關閱讀
- 線上一步到位的轉換:JSON 轉 Excel 完整指南
- 物件陣列怎麼變成關聯工作表:JSON 陣列轉 Excel
- 不需要 Excel 時:JSON 轉 CSV 轉換指南