程式講 JSON、試算表講 CSV 和 Excel,遲早你得把資料在它們之間搬。三種格式裝的是同一批列與欄——關鍵是轉換時別把它弄壞。這篇說明怎麼做。
引號規則不用解釋,直接看。 我們把
[{"name":"Ada","dept":"R&D","hours":7.5},{"name":"Bo","dept":"Sales, EU","hours":8}]丟進 JSON 轉 CSV 工具,回來的是:name,dept,hours Ada,R&D,7.5 Bo,"Sales, EU",8看最後一行。
R&D是裸的,但Sales, EU被加上雙引號 —— 因為它自己含有分隔符號。這一條規則就是大多數手寫 CSV 匯出壞掉的原因:值裡面的一個逗號,會悄悄把一欄變成兩欄。輸入複製過去就能自己驗。
三種格式各自的用途
- JSON——給程式與 API 的結構化資料。表格型資料通常是物件陣列:
[{"name":"Ann","age":30}, …],每個物件是一列。 - CSV——純文字表格(逗號分隔)。通用、極小、幾乎什麼都能匯入。
- Excel(.xlsx)——含格式、多工作表與公式的二進位試算表,也是多數同事真正會打開的檔。
JSON 轉 CSV
最好轉的 JSON 是扁平物件的陣列:每個物件成為一列,鍵成為標題列。巢狀物件無法乾淨對映成平面表格,請先攤平(或只期待最上層被轉換)。
另外注意標頭列是怎麼來的。我們的轉換器輸出 name,dept,hours,是讀第一個物件的鍵 —— 不是掃過每一筆記錄。如果你的第二筆記錄多了一個鍵,那個鍵沒有地方可去,這就是「攤平與正規化要在匯出之前做、不是之後」的實務理由。
JSON 轉 Excel
道理相同,但輸出是可直接用 Excel、Numbers 或 Google 試算表打開的 .xlsx——不必再匯入。要把資料交給整天用試算表的人時最方便。
CSV 或 Excel 轉回 JSON
反過來,把試算表變成程式可解析的物件陣列——很適合灌資料庫、餵 API 或載入測試資料。
攤平巢狀 JSON
CSV 與 Excel 是平面的格子,巢狀結構得先展開。慣例是把鍵改成點記法:
[{ "name": "Ann", "address": { "city": "Berlin", "zip": "10115" } }]
會變成有 name、address.city、address.zip 三欄的表。陣列比較棘手:一串值常被併進同一格("red; green"),一串物件則通常要一列一筆。轉換前先決定形狀,欄位才會一致。
分隔符、引號與編碼
CSV 的麻煩多半出在三件事:
- 分隔符。「逗號分隔」不是通則。許多歐洲地區用逗號當小數點,Excel 反而預期用分號。若欄位沒被切開,換個分隔符試試。
- 引號。 值裡若含分隔符、引號或換行,必須用雙引號包住,內部的引號要成對加倍:
"她說 ""嗨"""。 - 編碼。 存成 UTF-8。Excel 常需要 **BOM(位元組順序記號)**才能正確顯示重音或中日韓文字;少了它就會亂碼,例如
é。
引號是「一份 CSV 能不能原樣來回」的決定因素,而一個輸入就能定案。我們給自己的JSON ↔ CSV/Excel 轉換器兩筆記錄,其中一個值含逗號、另一個含 & 符號:
[{"name":"Ada","dept":"R&D","hours":7.5},{"name":"Bo","dept":"Sales, EU","hours":8}]
它回傳的是
name,dept,hours
Ada,R&D,7.5
Bo,"Sales, EU",8
只有 Sales, EU 被加了引號,R&D 沒有。整條規則就是這樣 —— 一個欄位只有在含分隔符、含引號字元、或含換行時才加引號,否則就裸著。一個什麼都加引號的轉換器仍然產出合法 CSV,但檔案會膨脹一倍,而且會弄壞那些直接比對原始字串的簡單解析器;一個什麼都不加的,會靜靜地把兩筆記錄變成三個欄位。
為什麼 Excel 會弄壞我的數字
用 Excel 打開 CSV,像 00123 這種 ID 會掉開頭的零、訂單號那類長數字串會變成科學記號(1.23E+11)、看起來像日期的內容會被「貼心地」改格式。這些是 Excel 的顯示轉換,不是你資料壞了。要保住原值,貼上前先把欄位設成文字格式,或用「資料 → 從文字/CSV」匯入並把該欄標成文字。轉換前先用 常見 JSON 錯誤那篇驗一下,別讓一個多餘的逗號毀掉整批轉換。
在瀏覽器本機做,不上傳
資料檔常含機敏資訊,會上傳的工具就是風險。以下工具完全在你的裝置上執行:
- JSON ⇄ CSV ⇄ Excel 轉換——貼上 JSON 或 CSV、或上傳 .xlsx,三者互轉。
- JSON 格式化——先整理、驗證你的 JSON,轉換才可預期。
轉得乾淨的技巧
- 讓 JSON 是鍵一致的物件陣列——才會 1:1 對映成欄位。
- 先驗證 JSON(一個多餘逗號就會壞掉)。
- 轉 Excel 時記得輸出是真正的
.xlsx,不是把 CSV 改名。
掌握「物件陣列」這個形狀,JSON、CSV、Excel 之間的搬移就變成兩下點擊、不上傳的小事。