ToolAct工具行動

CSV 轉 JSON 工具

上傳 CSV 檔案或貼上資料,轉換為 JSON 格式

拖放 CSV 檔案到此處,或點選選擇檔案

什麼是 CSV 轉 JSON?

CSV 轉 JSON 是一個線上資料格式轉換工具,可以將 CSV(逗號分隔值)格式的資料轉換為 JSON(JavaScript 物件表示法)格式。

CSV 是一種常見的表格資料格式,廣泛用於電子試算表和資料庫匯出。JSON 是現代 Web 應用中最常用的資料交換格式,具有結構清晰、易於解析的優點。

使用本工具,您可以快速將 CSV 資料轉換為 JSON 陣列或物件,方便在程式設計和資料處理中使用。

使用方法

使用方式

  1. 在左側輸入面板貼上或輸入 CSV 資料
  2. 選擇適當的分隔符號(預設為逗號)
  3. 選擇是否將第一行作為欄位名稱
  4. 右側面板將自動產生 JSON 結果

CSV 解析注意事項

  • 在信任 JSON 輸出前,請檢查分隔符號、引號處理與標題列設定。
  • 大型 CSV 檔案可能包含空行、內嵌逗號或引號儲存格內的換行;轉換後請先預覽幾列。

使用場景

將上傳的 CSV 或 TSV 檔案轉為 JSON 陣列拖放或選擇 .csv、.tsv 或 .txt 檔案,選擇逗號、定位點、分號或管線符號作為分隔符,並決定第一行是否作為物件鍵或保持為陣列輸出。檔案透過 FileReader 在瀏覽器中讀取,使用串流分詞器在本地解析,不會上傳,因此客戶匯出或內部資料不會離開裝置。
使用 JSON 前先預覽行數和欄位數利用顯示的檔案名稱、行數、欄位數和醒目提示的 JSON 輸出,在複製到 mock 或腳本之前發現分隔符錯誤、缺少標頭或空行。這是一個受控的中間步驟:將輸出貼到實際目標位置,確認接收系統以相同方式解譯。
在瀏覽器中處理簡單的帶引號 CSV解析器支援帶引號的欄位、雙重轉義引號和四種常見分隔符,適合處理小型匯出和測試資料。檔案完全在瀏覽器記憶體中處理,因此即使是敏感的人力資源、財務或預備環境快照也能在不經網路傳輸的情況下重新塑形。
傳送 JSON 到型別 API 時保留型別資訊轉換後掃描輸出,找出應為數字、布林值、日期或 null 而非字串的欄位,在傳送到 REST 或 GraphQL 端點之前對陣列進行後處理。CSV 沒有原生型別,因此快速目視檢查前幾列通常足以發現帶引號的 ID 和補零的代碼。
推送到 mock 或 fixture 前找出格式錯誤的行利用行數、欄位數和解析錯誤來標記不符合預期欄位數的行,然後修正來源 CSV 而非讓錯誤的行滲入 mock JSON。預覽面板會停在第一個不一致的行,讓你在重新執行之前修正分隔符或補上缺少的引號。

技術原理

CSV 解析遵循 IETF RFC 4180 文法:每筆記錄以 CRLF 結尾(部分方言接受 LF 或 CR),每筆記錄包含以分隔符號分隔的欄位(RFC 中為逗號,但 TSV、分號和管線符號是廣泛使用的變體),任何包含分隔符號、CR、LF 或雙引號的欄位必須以雙引號包裹,內部雙引號以加倍方式跳脫(Hello "world" 變為 "Hello ""world""")。本頁面的解析器是一個具有四種狀態的狀態機——field_start、in_unquoted、in_quoted、after_quote——以單次 O(n) 遍歷字元流處理輸入,因此一份 10 MB、10 萬列的 CSV 在一般筆電上能在遠低於一秒內完成,且不會為每列分配中間詞法單元陣列。 編碼需要明確處理:檔案開頭的 UTF-8 BOM(EF BB BF)在解析前會被移除,否則第一個標題名稱會以不可見的 U+FEFF 碼點開頭,導致下游的 JSON.parse 相等性檢查失敗。Windows 上的 Excel 匯出仍使用 CRLF 且通常帶 BOM 的 UTF-8,而 macOS Numbers 和大多數 Unix 工具預設使用不含 BOM 的 LF。歐洲的試算表常匯出分號分隔的檔案,因為逗號在許多地區設定中是小數點分隔符(49,90 EUR 而非 49.90),這就是為什麼分隔符號選擇器預設為逗號但將定位點、分號和管線符號作為一級選項。首行作為標題的開關將輸出形狀從物件陣列(標題鍵 -> 字串值)變為陣列的陣列,以匹配下游程式碼的兩種常見接收模式。 欄位值以字串形式輸出,而非推斷型別——CSV 沒有結構描述,因此 01234(補零的 ID)、1e10(看起來像電話號碼的字串,JSON.parse 會強制轉為數字)和 2024-13-45(格式錯誤的日期)都保持原樣。這是刻意的:下游的型別化 API 可以套用 zod、Joi 或手寫的強制轉換層並使用明確規則,但它無法還原轉換器已經丟棄的前導零。輸出透過 JSON.stringify(rows, null, 2) 產生並透過語法突顯器渲染;來源 CSV 使用 FileReader.readAsText() 讀取 Blob,永遠不會上傳到後端,因此人力資源匯出、財務帳本和客戶名單可以在不離開瀏覽器工作階段的情況下重新塑形。

  • RFC 4180 文法:包含分隔符號 / CR / LF / " 的欄位必須加引號;內部引號以 "" 加倍跳脫。
  • 單次 O(n) 狀態機,狀態為:field_start、in_unquoted、in_quoted、after_quote。
  • UTF-8 BOM(EF BB BF / U+FEFF)在檔案開頭被移除,以保持標題鍵乾淨。
  • 歐洲試算表常用 ; 作為分隔符,因為 , 在地區設定中是小數點標記。
  • 首行作為標題切換輸出為 Array<Record<string,string>> 或 Array<Array<string>>。
  • 所有欄位值保持字串;補零 ID 如 01234 能保留是因為沒有執行型別推斷。
  • FileReader.readAsText() 在本地處理 Blob;不會上傳——對人力資源 / 財務 / 預備環境匯出安全。

範例

含表頭的基本 CSV → 物件 JSON 陣列

CSV 輸入:
name,age,city
Alice,28,New York
Bob,35,London
Carol,42,Tokyo

JSON 輸出:
[
  { "name": "Alice", "age": "28", "city": "New York" },
  { "name": "Bob",   "age": "35", "city": "London"   },
  { "name": "Carol", "age": "42", "city": "Tokyo"    }
]

含逗號的引號欄位

CSV 輸入:
id,product,description
1,"Notebook, A5","Hard cover, 200 pages"
2,Pen,"Black ink, 0.5mm"

JSON 輸出:
[
  { "id": "1", "product": "Notebook, A5", "description": "Hard cover, 200 pages" },
  { "id": "2", "product": "Pen",          "description": "Black ink, 0.5mm" }
]

無表頭的 TSV(Tab 分隔)

TSV 輸入(分隔符 = Tab,停用表頭):
101	Alice	98.5
102	Bob	87.0
103	Carol	92.3

JSON 輸出:
[
  ["101", "Alice", "98.5"],
  ["102", "Bob",   "87.0"],
  ["103", "Carol", "92.3"]
]

分號分隔(歐洲試算表匯出格式)

CSV 輸入(分隔符 = ;):
product;price_eur;stock
Keyboard;49,90;120
Mouse;19,90;345

JSON 輸出:
[
  { "product": "Keyboard", "price_eur": "49,90", "stock": "120" },
  { "product": "Mouse",    "price_eur": "19,90", "stock": "345" }
]
備註:數字會保留為字串,請在後續程式中自行轉型。

常見問題

支援哪些 CSV 變體?

標準 RFC 4180 CSV:以逗號分隔、用雙引號包欄位、雙引號跳脫採雙寫法。將分隔符改成 Tab(TSV)或分號的 CSV 也可以處理。各種換行符(LF/CRLF/CR)會自動處理。

標題列是怎麼處理的?

若啟用「第一列為標題」,解析器會把每個標題格當作該欄的 JSON 鍵,產出物件陣列。關閉標題後,解析器會產出陣列的陣列。空的標題格會給予一個數字佔位鍵。

型別是怎麼推斷的?

預設一律當作字串。打開「自動型別」會嘗試解析數字、布林(true/false)和 null。前置零的數字(00123、0042)會保留為字串,避免遺失前綴——很適合用在 ID 或郵遞區號。

如果欄位裡含有逗號或換行怎麼辦?

用雙引號包起來:"Smith, John" 或 "line one\nline two"。內嵌的雙引號要寫兩次:"He said ""hi"""。解析器都能處理;資料列斷掉的話,通常是引號不平衡所致。

轉換是在本地還是伺服器執行?

本地。解析在你的瀏覽器中由 JavaScript 完成,貼上的 CSV 不會離開頁面。檔案太大可能讓瀏覽器變慢;如果單次貼上超過數十 MB,建議先切分再處理。

會保留欄位順序嗎?

會——每列會轉成 JSON 物件,鍵的順序與 CSV 標題列順序一致;現代引擎的 JSON.stringify 會保留插入順序。如果下游工具讀 JSON 不保留插入順序,那是它的限制。

日期該怎麼處理?

日期會保留為字串。自動型別不會解析任意日期格式,因為沒有不會引起歧義的標準(1/2/2024 在美國是 1 月 2 日,在歐洲是 2 月 1 日)。如果下游需要原生 Date 物件,匯入前請先把日期轉成 ISO 8601(YYYY-MM-DD)。