JSON 轉 CSV
最後更新:2026年10月1日
把 JSON 物件陣列轉換為 CSV 表格。每個物件成為一列,鍵成為欄,輸出依試算表期望的規則加上引號——全部在瀏覽器中完成,資料不會離開本機。
這個轉換做了什麼
CSV 檔案是一張用純文字寫成的表:每一列一筆紀錄,儲存格之間用分隔符隔開,最上面一列給出欄名。JSON 沒有這種形狀。兩者最自然的交會點是物件陣列——每個物件是一筆紀錄,它的鍵就是欄名。API 回傳清單時正是這個佈局,所以本轉換器優先接受它。
給定 [{"id":1,"name":"Ada"},{"id":2,"name":"Grace"}],輸出是表頭列 id,name,接著是兩列 1,Ada 與 2,Grace。除了下列規則之外,不會重排,也不會改寫任何值。
哪些 JSON 形狀能變成表
- 物件陣列——每個物件是一列;表頭是所有鍵的聯集。
- 列陣列——原樣作為列使用,不推斷表頭,適合你已經排好形狀的資料。
- 單一物件——當作一列,鍵作為表頭。
- 值的陣列——單欄,沒有欄名。
- 其他任何形式——單獨的數字、字串或
null不是表格,會回報錯誤,而不是被悄悄改寫。
「聯集」這個細節很重要。如果部分紀錄有 phone 鍵而另一些沒有,表頭仍會包含 phone,那些沒有該鍵的列對應儲存格留空——這一欄不會被丟棄。直接的後果是:結構不一致的 JSON 會產生欄很多、但大量儲存格為空的表。
巢狀值會變成文字
一個儲存格只能放文字,所以值裡巢狀的物件或陣列會以緊湊 JSON 寫進儲存格。{"address":{"city":"London"}} 會變成儲存格 {"city":"London"}。資訊還在,但不再是結構化的:本轉換器不會把 address.city 拆成帶點的欄。如果你想要帶點的欄,請先攤平 JSON——那是資料建模的取捨,不是格式化的問題。
引號、分隔符與行尾
輸出遵循 RFC 4180,也就是所有試算表與 CSV 函式庫共同遵守的規則:
- 只有當欄位必須加引號時才加——即它包含分隔符、雙引號、換行,或首尾有空白時。
- 引號內的雙引號寫成兩個,從而精確還原原文。
- 每一列以 CRLF(回車加換行)結尾,即規範指定的那一對字元。
分隔符由你選擇。預設是逗號,但在以小數點為逗號的系統上,選分號較為穩妥,否則以逗號分隔的檔案在那裡會有歧義。定位字元與直線適合本身已含有逗號的資料。
讓 Excel 乾淨地開啟檔案
Excel 不會無條件以 UTF-8 讀取:對一個沒有位元組順序標記的 .csv,它會猜測編碼,而且經常猜成舊編碼,把重音字母與中文變成亂碼。為 Excel 加入 BOM 選項會在下載檔案開頭加上三 bytes 的 UTF-8 標記,讓 Excel 正確解碼。它只作用於下載檔案,頁面上顯示的文字保持乾淨。
CSV 無法帶回的東西
CSV 是文字格式,是有損的。它會忘記哪些值原本是數字、布林值或 null,也會把巢狀攤平為文字。null 與空字串都會變成空儲存格,數字會變成它的字面。轉回 JSON 時,除非在另一頁開啟型別辨識,否則得到的是字串——即使開啟了,像 007 這樣的編碼也必須保持字串以保留前導零。型別重要時請保留原始 JSON;把 CSV 當作匯出,而不是主要副本。
常見問題
什麼樣的 JSON 可以轉換成 CSV?
CSV 是一張表,所以最自然的輸入是物件陣列:每個物件成為一列,它的鍵成為欄。列陣列會原樣作為列使用,單一物件成為一列,一般值的陣列成為單欄。除此之外——單獨的數字、字串或 null——都不是表格,會被拒絕。
當物件的鍵不一致時會怎樣?
表頭是陣列中所有出現過的鍵的聯集,依首次出現的順序排列。缺少某個鍵的列,對應儲存格留空。這就是為什麼從結構不一致的 JSON 產生的 CSV 裡,許多列的某些欄會是空白。
巢狀的物件與陣列如何處理?
CSV 沒有巢狀結構,所以本身是物件或陣列的值,會以緊湊 JSON 文字的形式寫進儲存格。資訊保留了,但不再是結構化的——這個轉換是透過字串化來攤平,而不是把巢狀鍵拆成帶點的欄名。
欄位什麼時候會加上引號?
當欄位包含分隔符、雙引號、換行,或首尾有空白時,就會加上引號。引號內的字面雙引號會寫成兩個,從而精確還原原文。這是 RFC 4180 的規則,也是單一儲存格能容納逗號或換行的原因。
為什麼我的 CSV 在 Excel 裡顯示為亂碼?
Excel 會猜測 .csv 檔案的編碼,如果沒有位元組順序標記,它常常猜成舊編碼,因而把非 ASCII 文字(如重音字母或中日韓文字)弄亂。勾選 BOM 選項會在下載的檔案開頭加上 U+FEFF,讓 Excel 依 UTF-8 解碼。BOM 只加到下載檔案裡,不影響頁面上顯示的文字。
JSON 轉 CSV 是無損的嗎?
不是。CSV 儲存的是文字,所以它會忘記哪些值原本是數字、布林值或 null,也無法表示巢狀(只能寫成文字)。把 CSV 再轉回 JSON 時,除非開啟型別辨識,否則得到的是字串。如果需要精確還原型別,請保留原始 JSON。
想要相反方向?CSV 轉 JSON 可以把一張表讀回物件陣列。發現錯誤?聯絡我們。