為什麼 CSV 轉 JSON 總在細節上翻車
CSV 看起來是最簡單的格式——逗號分隔、一行一條記錄。但真轉起來,翻車點全在細節:訂單號變成科學記號、Excel 匯出的中文全變問號、值裡帶逗號把一行拆成兩半、沒有表頭的檔案第一行資料被當成欄位名吃掉。這些坑每一個都對應 CSV 規範或編碼層的一條規則,理解了規則,轉換就從「碰運氣」變成「確定性」。
先給最快的路徑:CSV 轉 JSON 線上工具把常見決策都做成了預設正確——分隔符號自動嗅探、型別推斷、16 位以上整數保字串、BOM 自動剝離,貼上即出結果。下面逐條講這些預設值背後的規則,幫你判斷什麼時候需要手動調。
表頭:第一行到底是不是欄位名
JSON 陣列的每一項是物件,欄位名從哪來是第一個決策:
- 首行是表頭(最常見):
name,age變成"name"、"age"鍵。空表頭儲存格要補名(本站工具補column_N),重名表頭要消歧(補_2、_3),否則物件鍵會互相覆蓋。 - 沒有表頭:欄位名自動產生
column_1、column_2……注意欄數要按全表最寬的行算——只按首行算,後續行的尾部欄位會被靜默丟棄,這是無表頭模式最常見的靜默 bug。
Excel/WPS 裡複製一塊區域貼出來的是 Tab 分隔(TSV),不是逗號——好的轉換工具會自動嗅探,不用你先轉格式。
型別推斷:哪些值該變數字,哪些必須保持字串
CSV 裡一切都是文字,JSON 有型別,於是推斷規則決定了輸出品質:
| CSV 原文 | 推斷結果 | 說明 |
|---|---|---|
30 |
30(數值) |
常規數字轉數值 |
true / false |
布林 | 大小寫不敏感識別 |
007 |
"007"(字串) |
前導零轉數字會丟零,保持字串 |
9223372036854775807 |
字串 | 16 位以上超 Number 精度上限(2^53),必須字串承載 |
| 空儲存格 | null / "" / 省略 |
三種策略按消費端約定選 |
訂單號、雪花 ID、身分證號是重災區:JS 的 Number 只能精確表示到 2^53-1(約 9 千萬億),19 位的雪花 ID 直接轉數值末幾位會變成 0。判斷標準很簡單:位數 ≥16 就該走字串。如果下游系統要求所有欄位都是字串,直接關掉型別推斷做全字串輸出。
帶引號的欄位是另一條規則:"Smith, John" 裡的逗號是值的一部分,不是分隔符——符合 RFC 4180 的解析器都能正確處理,手寫 split(',') 會在這裡翻車。
中文亂碼:九成是編碼問題,不是工具問題
「CSV 轉 JSON 中文亂碼」是高頻搜尋詞,但亂碼幾乎都發生在轉換之前——檔案編碼不對:
- Excel 另存為 CSV 預設可能是 ANSI/GBK(跟系統區域設定走),而 Web 工具一律按 UTF-8 解析。GBK 位元組按 UTF-8 解出來就是亂碼或替換字元
�。 - 解法:Excel 裡「另存為」時選 「CSV UTF-8」 格式;或者把內容貼到 VS Code(右下角能看到並切換編碼),確認 UTF-8 後再複製貼上到工具。
- BOM:Windows 記事本/Excel 匯出的 UTF-8 CSV 常帶 BOM(
\uFEFF),它會讓第一個欄位名變成\uFEFFname這種隱形污染。合格的工具會自動剝離 BOM。
本站工具在偵測到內容含替換字元(非 UTF-8 解碼的標誌)時會直接提示重新另存為 CSV UTF-8,而不是讓你盯著亂碼猜原因。
一步到位的動線
CSV 轉 JSON 工具的預設組態就是本文的建議值:表頭開啟、型別推斷開啟(含前導零與大整數保護)、空儲存格為 null。流程三步:貼上或上傳 → 需要時調整選項(關表頭、全字串、排除欄)→ 複製或下載 .json。
轉出來之後常見兩個去向:格式化查看交給站內 JSON 格式化工具;反向轉回 CSV(改完資料要回表格)用 JSON 轉 CSV 工具,正反向選項語義對齊,來回轉不丟資訊。表格源頭是 Excel 檔案而非 CSV 時,Excel 轉 JSON 支援多工作表與合併儲存格。
Frequently Asked Questions
CSV 轉 JSON 用什麼工具最快?
線上轉換最省事:把 CSV 內容貼到本站的 CSV 轉 JSON 工具,分隔符號自動識別,數字、布林、空值自動推斷型別,結果一鍵複製或下載 .json 檔案;資料全程在瀏覽器本地處理,不上傳伺服器。
CSV 轉 JSON 中文亂碼怎麼解決?
根因是編碼:Excel「另存為 CSV」預設常是 ANSI/GBK,而多數工具按 UTF-8 解析。解決:另存時選「CSV UTF-8」,或先把內容貼到 VS Code 等編輯器確認編碼為 UTF-8 再複製貼上。本站工具偵測到疑似非 UTF-8 內容會直接給出提示。
長數字訂單號轉 JSON 後精度丟了怎麼辦?
這是 JavaScript Number 的精度上限(2 的 53 次方)導致的,16 位以上整數必須以字串承載。轉換時讓工具把 16 位以上整數保持為字串(本站工具預設如此),或整體關閉型別推斷全部按字串輸出。
沒有表頭的 CSV 怎麼轉 JSON?
關閉「首行是表頭」選項,欄位名會自動產生為 column_1、column_2 直到最後一欄。注意欄位數量要按全表最寬的行算,只看首行會把長行的尾部欄位丟掉。