CSV 转 JSON 转换器
即时将 CSV 数据转换为 JSON 对象数组
提示:也可以将 .csv 文件拖到此输入框。
CSV 转 JSON 转换器可将逗号、分号或制表符分隔的文本转换为 JSON 对象数组。它会自动检测分隔符、遵循 RFC 4180 引号规则,并可将字符串字段中的数字和布尔值推断为相应类型。输出经过美化打印,可复制、可下载,整个转换过程都在浏览器中完成。
使用方法
- 将 CSV 文本粘贴到输入框,或把
.csv文件拖放到输入框上——文件会自动加载并完成转换。 - 选择第一行是否作为表头(键名),以及是否将字符串推断为数字和布尔值。
- 点击「转换为 JSON」。分隔符(逗号、分号或制表符)会自动检测,并与行列统计一起显示。
- 一键复制格式化后的 JSON 数组,或下载为
.json文件。
分隔符检测原理
检测只查看第一行。程序逐字符扫描该行,跟踪是否位于引号字段内部,并统计出现在引号之外的逗号、分号和制表符。计数最高的候选者胜出;如果什么都没找到或计数相同,则使用逗号。正因为只读取第一行,如果文件首行是单个未加引号的值、而后面的行才用逗号分隔,就需要人工确认——解析器会退回到逗号,这通常是正确的,但首行与数据行使用不同分隔符的文件无法被可靠识别。
类型推断实战
开启推断后,转换器会用一小组模式逐一检查每个字段。所有不匹配的内容(包括空字符串)都保持为字符串:
| 原始字段 | 转换结果 | 原因 |
|---|---|---|
42 | 42(数字) | 整数模式 |
-7 | -7(数字) | 负整数模式 |
3.14 | 3.14(数字) | 小数模式 |
true / false | true / false(布尔值) | 字面量匹配 |
007 | 7(数字) | 前导零被丢弃 |
1e5 | "1e5"(字符串) | 不匹配指数写法 |
+5 | "+5"(字符串) | 不匹配加号 |
| (空) | ""(字符串) | 空值保持为空 |
这套模式在某些方面刻意保守,在另一些方面却不够谨慎:它不会碰科学计数法,却会悄悄抹掉标识符的前导零。
实操示例
一个带表头、开启推断的小型逗号分隔文件:
name,age,active
Alice,30,true
Bob,25,false
会转换为:
[
{ "name": "Alice", "age": 30, "active": true },
{ "name": "Bob", "age": 25, "active": false }
]
同样的数据在关闭推断后会得到 "age": "30"、"active": "true" 等——每个值都是字符串。
一个包含标识符类值的分号分隔导出:
id;zip
007;01234
检测器从第一行判定分隔符为分号。开启推断时结果为 [{"id":7,"zip":1234}],对 ID 而言几乎肯定是错的;关闭推断后为 [{"id":"007","zip":"01234"}]——这才是这类列的正确选择。
边界情况与常见错误
- 对 ID 列保留类型推断。 邮编、电话号码和补零 ID 都会丢失前导零。这是本工具最常见的意外。
- 想当然地依赖表头。 如果文件没有表头却保持表头开关开启,第一行数据会被当作键名消耗掉;如果文件有表头却关闭开关,那一行会被重复计入数据。
- 以为多余的列会被保留。 超出表头列数的字段会被丢弃而非追加,因此参差不齐的文件会悄悄丢失尾部数据。
- 以为引号总是特殊字符。 双引号只有在字段最开头才会开启引号字段,出现在中间时按字面保留。有些工具生成的文件依赖这一行为,因此该处理是有意为之。
- 把末尾换行当作一行。 单个行尾换行不会凭空多出一个空对象,但文件中间真正空白的行会产生一个只含单个空字符串的行。
处理大型或特殊文件
解析只需单次遍历,但整段文本和结果数组都会保存在内存中,所以数兆字节的文件可能变慢或触及浏览器内存上限。超大导出通常更适合用流式解析器处理。注意 Excel 保存的文件开头可能带有 UTF-8 字节顺序标记(BOM):BOM 可能被附加到第一个表头键上,于是名为 name 的列会显示为 \ufeffname。另存为不带 BOM 的 UTF-8,或删除首字符即可修复。工具只处理 UTF-8 输入,其他编码不会被转换,因此带重音符号的字符可能在到达时就已乱码。另外,由于分隔符检测只读取第一行,首行与数据行使用不同分隔符的文件无法被正确拆分,请先单独修正数据再进行转换。
功能特性
- 完整支持 RFC 4180:带引号的字段即使包含逗号、换行和转义引号也能正确解析——包括 Excel 导出的多行单元格。
- 分隔符自动检测:根据第一行自动检测逗号、分号和制表符,欧洲格式 CSV 和 TSV 文件开箱即用。
- 可选类型推断:默认推断数字和布尔值;一个开关即可切回全字符串输出,保护
"007"这类 ID 字段。 - 灵活的表头处理:使用第一行作为键名,或关闭表头后自动生成
column_1…column_N键。 - 完全在本地运行:内置解析器在浏览器中运行——无上传、无存储、无第三方依赖。
使用场景
- 表格导出对接 API:将 Excel 或 Google Sheets 导出转换为 JSON 数组,直接用于 REST API 请求体或数据初始化脚本。
- 测试夹具:把表格形式的测试数据转换为 JSON 夹具,精确控制每个字段的类型。
- 欧洲格式 CSV:德语、法语环境导出的分号分隔文件会被自动识别——无需手动查找替换。
- 快速查看数据:粘贴几行 CSV 即可看到结构化的 JSON,然后复制到代码或笔记中。
- 一次性数据清洗:粘贴文件并关闭推断,输出会逐字保留每个值,方便检查源文件真实内容。
相关工具
常见问题
分隔符是如何检测的?
转换器扫描第一行,统计引号字段之外的逗号、分号和制表符数量,选择出现最多的一个。无论是 Excel 导出(逗号)、欧洲本地化格式(分号)还是 TSV 文件(制表符)都能自动识别。
类型推断开关有什么作用,什么时候应该关闭?
类型推断(默认开启)会把看起来像数字或布尔值的字段转换类型:"42" 变成 42,"true" 变成 true。当数据包含 "007" 这类 ID 字段、带前导零的邮编或电话号码时,请关闭它——推断会悄悄把 "007" 变成 7,破坏原始数据。关闭推断后,所有值都按原样保留为字符串。
带引号的字段如何处理?
解析器遵循 RFC 4180:用双引号包裹的字段可以包含逗号、换行,甚至引号本身(两个连续双引号 "" 转义为一个 ")。电子表格导出的多行单元格也能正确解析。
如果各行列数不一致会怎样?
较短的行会用空字符串补齐,保证每个对象的键一致;超出表头列数的多余字段会被丢弃。关闭表头开关时,键会自动生成为 column_1、column_2 等。
类型推断会把科学计数法或带加号的数字转成数字吗?
不会。推断只匹配可选的负号加数字、再带可选小数部分的模式,所以 42 和 3.14 会变成数字,而 1e5、+5 和 3. 仍保持字符串。如果你的列里含有这些写法,最稳妥的做法是关闭推断,转换后再自行处理。
出现在未加引号字段中间的双引号会怎样?
双引号只有在字段最开头才会开启引号字段。出现在其他位置的双引号会被当作普通字符保留,因此像 12" 管这样的值不会吞掉整行剩余内容。以引号开头的字段仍遵循 RFC 4180,包括用两个连续双引号表示一个字面引号。
由 HandyTools Hub 团队审校 · 最后更新