fixmint
ZH-TW

CSV 轉 JSON 再轉回來,資料不會壞掉

作者: · · 更新於 2026年11月8日 · 閱讀約 5 分鐘

CSV 是純文字表格:每行一筆紀錄,欄位之間以分隔符號隔開,通常是逗號。當欄位裡含有分隔符號、雙引號或換行時就會出錯,因為讀取的程式必須分辨哪些是結構、哪些是內容。請遵守引號規則、檢查分隔符號與標題列,並將開頭帶零的數字保留為文字。本文其餘部分說明一次轉換往返能保留什麼、無法保留什麼。

CSV 轉 JSON需要把 CSV 轉成 JSON,或反過來免費使用

CSV 檔案究竟是什麼

CSV 並沒有單一的權威標準,但 RFC 4180 描述了常見的格式,多數讀取程式都遵循它。其核心規則可以用一份短清單說明:

  • 每筆紀錄獨占一行,RFC 規定行尾為歸位字元加換行字元,即 CRLF。
  • 欄位以逗號分隔。
  • 含有逗號、雙引號或換行的欄位,要以雙引號括住。
  • 在被引號括住的欄位內,雙引號要寫成兩個雙引號。

所以這列 1001,"Smith, Ann",02134 有三個欄位,因為引號內的逗號屬於內容。若一看到逗號就切開的分割程式,則會切出四個欄位。fixmint 的讀取器會套用這些規則:被引號括住的欄位可以包含分隔符號、換行與重複的雙引號,而未關閉的引號會回報其起始所在的行。

分隔符號為何會改變

逗號是 RFC 的預設值,但在逗號為小數點的地區(例如 1,5 表示一點五),試算表常會改用分號儲存 CSV。Tab 分隔的檔案(TSV)在多數資料中可避開衝突,因為文字裡很少出現定位字元。

「分隔符號」選單提供「自動」、「逗號」、「分號」、「Tab」與「直線符號」。「自動」會讀取前十行,統計引號之外每一種候選符號的出現次數,並挑選每行數量最一致的那一種。若自動判斷錯誤,請自行選擇分隔符號。

在 fixmint 中轉換

範例使用的是 CSV 轉 JSON 工具 的預設選項。

範例演示

貼上以下 CSV,並勾選「第一列是標題」:

id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"

在「轉換數字」關閉、「JSON 縮排」設為 2 個空格的情況下,工具會回傳:

[
  {
    "id": "1001",
    "name": "Smith, Ann",
    "zip": "02134",
    "note": "She said \"hi\""
  },
  {
    "id": "1002",
    "name": "Bo",
    "zip": "10001",
    "note": "line one\nline two"
  }
]

開啟「轉換數字」後,id 欄的數字與 10001 會變成數字,而 02134 仍保留為文字。

操作步驟

  1. 貼上 CSV,或拖放 .csv、.tsv、.txt 或 .json 檔案。
  2. 檢查「第一列是標題」、「分隔符號」與「轉換數字」。JSON 縮排可選 2 個空格、Tab 或「壓縮」。
  3. 複製結果,或下載為 .json。

把數字保留為文字

JSON 數字不能有開頭的零,所以 02134 不是有效的 JSON 數字。郵遞區號、電話號碼與商品代碼必須保留為文字,否則零會消失。開啟「轉換數字」時,工具會把 10001 轉為數字,但把 02134 保留為字串。此選項預設為關閉。它只會轉換以點作為小數點的值,因此分號檔案中的 1,5 會維持原樣。

長的識別碼也需要注意。執行多數瀏覽器內 JSON 處理的 JavaScript 會把數字存成 64 位元浮點數。整數只有到 9,007,199,254,740,991(即 2 的 53 次方減 1)時才能精確表示。數字 12345678901234567890 被 JavaScript 程式讀取時會變成 12345678901234567000。工具會照原樣寫出數字,但若程式用 JavaScript 解析這份 JSON,就會發生捨入。請將 ID 保留為字串。格式化 JSON 工具 也會原樣保留這類數字,並會說明保留了幾個。

巢狀 JSON 與轉回 CSV

CSV 是扁平的,JSON 則可以巢狀。將 JSON 轉為 CSV 時,會為所有物件中的每個鍵建立一個欄位,欄位順序為各鍵首次出現的順序。巢狀的物件或清單會以 JSON 文字放入儲存格,null 會變成空白儲存格,true 與 false 則以文字寫出。各列以 CRLF 連接,只有在欄位包含分隔符號、引號、換行,或前後有空格時,才會加上引號。

開頭為 [ 或 { 的輸入會被視為 JSON。切換按鈕可切換方向,標示為 CSV → JSON 或 JSON → CSV。在 JSON → CSV 方向中,輸出選項會顯示「分隔符號」選單與「給 Excel 用」選項。

轉換往返會遺失資訊。null 與空字串都會變成空白儲存格,巢狀結構也無法還原,因此若需要保留結構,請保留原始 JSON。

Excel、UTF-8 與位元組順序標記

CSV 檔案是位元組,讀取程式必須知道編碼。UTF-8 可以容納帶重音的字母與其他字母系統。位元組順序標記(BOM)是檔案開頭的三個位元組,用來標示檔案為 UTF-8。沒有 BOM 時,某些試算表程式會以本地的代碼頁讀取檔案,帶重音的字母就會變成怪字元。試算表在開啟 CSV 時,也常會把 02134 變成 2134。

「給 Excel 用」選項只會在下載的 CSV 中加入 BOM,不會加入複製的文字,並且只在 JSON → CSV 方向生效。讀取程式會移除輸入中的 BOM,因此已有 BOM 的檔案也能正常轉換。

特殊情況

  • 列長不一致。 開啟標題時,較短的列會以空值補齊,較長的列則會將多出的值保留為 column_N。結果會回報有多少列與標題不同。
  • 重複或空白的標題。 重複的名稱會加上 _2、_3 等後綴,空白名稱會變成 column_N。這些變更能避免兩個鍵互相覆蓋。
  • 彎引號。 文書處理軟體產生的彎引號不是 CSV 的引號,因此像 “Smith, Ann” 這樣的欄位會在逗號處被切開。請先用修正貼上的文字處理,或依照彎引號指南所述的方法改為直引號。
  • 引號內的換行。 跨越兩行的欄位仍是一筆紀錄,但刪除重複行會在每個換行處切開輸入,因此會把兩半視為不同的列。請轉為 JSON 並比對物件,或以人工檢查。此工具仍適用於每行一個值的清單。
  • 大型檔案。 結果方塊只顯示前 100,000 個字元,但「複製」與下載會包含完整輸出。
  • 無效的 JSON。 轉換器會回報錯誤所在的行與欄,並在字元下方標示插入符號。格式化 JSON 工具會說明常見的失誤,JSON 錯誤指南則更詳細地介紹。

多數 CSV 問題,在分隔符號真正造成影響之前,就已經由欄位前後多餘的空格、檔案中間的空白列,以及不一致使用的引號所造成。請先用CSV 清理工具整理,再進行轉換。

借助 AI 協助,由英文原文翻譯而成。

留言

    還沒有留言,搶先留言吧。

    您的評分(選填)

    您的電子郵件不會顯示,也不會被保存。

    How to Remain Valuable When Intelligence Becomes Cheap 的封面How to Remain Valuable When Intelligence Becomes Cheap

    224 頁,探討當 AI 能處理多數認知工作時,人類、經濟與策略上仍然稀缺的優勢。

    $3.84在 Gumroad 購買英文版