为什么 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 支持多工作表与合并单元格。
常见问题
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 直到最后一列。注意字段数量要按全表最宽的行算,只看首行会把长行的尾部字段丢掉。