跳至主要內容
Lizely

CSV 到 JSON

解析一個受限的 RFC 4180 格式逗號分隔檔案,並在本機執行,輸出保留引號、逗號、引號和行結束符的 JSON,不損失任何內容。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.貼上以逗號分隔的 CSV,其第一筆記錄包含非空且唯一的標頭名稱。
  2. 2.轉換並驗證資料行、欄位、單元格以及 UTF-8 輸出大小的總結。
  3. 3.確認每一個值皆為 JSON 字串,然後複製或下載 converted.json。

關於CSV 到 JSON

CSV 到 JSON 轉換器可將一個以逗號分隔的文字表格轉換為當前瀏覽器標籤中漂亮列印的 JSON 陣列。將 CSV 貼上,其第一筆資料包含標題,轉換後審閱 JSON,然後複製或下載轉換後的 converted.json。每個資料筆錄會轉換為一個物件。標題順序決定屬性順序,每個單元格會成為 JSON 字串。轉換器從不根據拼寫猜測數字、布林值、null、日期、公式或空白值。因此 001 會保持 "001",true 會保持 "true",null 會保持 "null",而空白單元格會保持為空白字串。解析器實現了一種有限 RFC 4180 風格的方言。逗號是唯一的分隔符。CRLF 是標準的記錄結尾,而單獨的 LF 和 CR 則被接受為互通性擴充套件,因為實際生產者會使用它們。最後的記錄結尾是選擇性的,不會產生另一筆空白記錄。連續的結尾則代表一個空白記錄。tab、分號和管號是欄位符號,而不是替代分隔符。這個工具不會自動偵測方言。欄位可以未加引號或用雙引號包圍。加引號的欄位可以包含逗號、CRLF、LF、CR 和雙重雙引號。 在一個被引用的欄位中,兩個連續的引號會被解碼為一個字元引號。未被引用的引號則視為錯誤。在一個閉合引號之後,僅接受逗號、記錄結尾或輸入結尾;空格或其他後續字元則被拒絕,不會被靜默刪除。嵌入在引號中的換行結尾會保留為欄位資料,並維持其原始的 CRLF、LF 或 CR 編碼方式。在解析標頭前,會先消耗一個 U+FEFF,以支援常見 UTF-8 BOM CSV 檔案,包括第一個標頭被引用的檔案。在移除該 U+FEFF 之前,會檢查原始輸入預算。U+FEFF 出現在其他位置則會保留為資料,不會被刪除。僅包含 BOM 的檔案在標準化後會被視為空檔,並報告輸入需求錯誤。此產品中,第一筆記錄總是標頭,即使 RFC 4180 允許標頭不存在。每個標頭在移除可選的前導 BOM 後,必須包含至少一個字元單位。空的第一、中間或最後標頭會失敗。重複的鍵值會被拒絕。比較時採用精確且大小寫敏感的方式,且空白字元視為資料,因此帶有空格的標頭不會被修剪。每個資料記錄必須包含與標頭欄位數量完全相同的欄位數。過短或過長的行會失敗,且不會產生部分 JSON。 記錄在序列化前會以空原型物件建立。此設計讓 __proto__、constructor、prototype 與 toString 成為普通屬性字串鍵,而非繼承行為。JSON.stringify 會對屬性名稱、引號、反斜線、控制字元及內嵌換行使用兩空格縮排進行轉譯。結果為有效的 JSON 資料,非可執行碼,接收端仍需解析並驗證。限制在轉換前或轉換過程中強制執行,絕不會以靜默上限處理。輸入內容最多僅含 5,000,000 UTF-16 字元。表格最多僅含 10,000 欄位資料行(含標題行)、200 欄位、以及 200,000 個資料單元。產生的 JSON 最多僅含 10,000,000 UTF-8 位元組,以 TextEncoder 測量,而非 JavaScript 字串長度。精確的邊界會被接受,任何一單位、行、欄位、單元或位元組超出邊界將明確失敗。多位元組 Unicode 輸出以編碼位元組計量。較低的單元預算可能在行數限制前拒絕寬表格,此為設計本意。狀態機會區分欄位起始、未引號內容、引號內容,以及引號結束後的內容。 它將 CRLF 觀為一個結尾(且僅在引號內不視為空白),避免 LF 造成空白行。它區分一個可選的終結與真正的空白記錄,並拒絕未閉合引號、裸引號或引號閉合後的雜訊。它不修復引號不匹配、合併不均的行、修剪欄位、捨棄空白記錄、跳過註解、恢復有效字首,或推斷資料結構。立即編輯 CSV 會收回舊的 JSON ObjectURL,並清除輸出、錯誤、摘要、複製狀態與計時器。轉換失敗不會留下殘留下載。複製請求攜帶產生識別,因此較早的權限完成無法在編輯或較新的嘗試後恢復狀態,複製計時器在被取代或解除安裝時會經由識別確認並中止。JSON ObjectURL 在編輯、取代、失敗或解除安裝時皆會被收回。所有解析、物件建立、UTF-8 量測、複製與 Blob 建立皆在本機完成。不會上傳任何 CSV 或 JSON。本工具不會取得連結值、評估電子表格公式、展平結構、去重記錄、重新命名鍵、標準化 Unicode,或驗證業務意義。 審閱標題與計數後再進行上傳,若原始引用或段落結束風格有影響,請保留來源 CSV。

方法與來源

檢查 5,000,000 位元組原始預算,消耗一個前導的 U+FEFF,然後以四個明確狀態進行解析。僅使用逗號;將 CRLF 觀為一個結束標記,並接受 LF 或 CR 為跨平臺相容延伸。保留引號內的逗號與換行,解碼雙重引號,拒絕裸引號或尾部引號語法,要求標頭為非空、唯一且精確,且每行必須與標頭寬度相符。強制執行 10,000 資料行、200 欄位、200,000 給定單元格、以及 10,000,000 UTF-8 輸出位元組,不允許部分結果。建立空原型的純字串記錄,使用 JSON.stringify 標準縮排,並以 TextEncoder 進行量測。編輯或失敗時會清除輸出;複製產生、計時器識別碼、掛載狀態與 ObjectURL 會清除以防止遺留狀態與洩漏下載。

常見問題

數字、true、false 或 null 會轉為 JSON 型別嗎?
不會。每個 CSV 區塊皆維持為 JSON 字串。例如,001 保持為 "001",null 則保持為 "null"。
支援哪些行結束標記與引號內容?
支援 CRLF、LF 與 CR 作為引號外的行結束標記。引號內的欄位可包含這些行結束標記、逗號與雙重雙引號。
若出現 UTF-8 的 BOM 應如何處理?
僅在最開頭處的 U+FEFF 會被消耗,於標頭解析前處理。任何後續位置的 U+FEFF 會作為欄位資料保留。
會上傳 CSV 嗎?
不會。解析、驗證、JSON 序列化、複製與下載建立皆在當前瀏覽器標籤頁本機完成。

開發者工具 使用指南

查看全部