ToolBench

转换

CSV 转 JSON

直接按逗号切开,遇到字段里本身含逗号就会崩——地址、产品名、整句话都可能带逗号。这个解析器遵循引号规则,所以「Smith, John」会完整地作为一个值。

JSON 会显示在这里。

怎么用

  1. 把 CSV 或 TSV 粘贴进来,分隔符会根据首行自动判断。
  2. 保持「首行是表头」勾选,用它作为对象的键。
  3. 数字字段想输出成 JSON 数字而不是字符串,就勾「数字转换」。
  4. 复制结果粘进代码或测试数据。

CSV 没有正式标准

CSV 背后没有一份有法律效力的规范。RFC 4180 描述的是常见约定——逗号分隔、含分隔符的字段用双引号包裹、字段内的引号写成两个——但大量软件并不遵守。欧洲区域设置下的 Excel 默认输出分号,因为那里的逗号是小数点。仅这一条,破坏的导入流程比其他任何原因都多。

编码与 BOM

Windows 上从 Excel 导出的文件,开头常常带一个 UTF-8 BOM。它在文本编辑器里看不见,但会成为第一个列名的一部分,于是代码在找「name」,实际拿到的是「\ufeffname」。如果转换出来的 JSON 第一个键看着多了个怪字符,几乎肯定是这个原因——解析前先剥掉 BOM。中文或带重音的文本,还要确认文件是 UTF-8 而不是旧代码页,否则所有非 ASCII 字符都会变成乱码。

Excel 到底导出了什么

三件事会让朴素的转换失败。第一,Windows 版 Excel 会写 UTF-8 BOM,它会变成第一个列名的一部分——于是你的键是 \ufeffid 而不是 id。第二,欧洲区域设置的机器导出的是分号分隔,因为逗号是它的小数点。第三,较长的数字 ID 在你看到文件之前就已经被转成科学计数法,末位数字丢了。

写解析器之前先确认这三点:用文本编辑器打开,看头三个字节,再看一行数据确认分隔符。

常见问题

字段里的引号和逗号能处理吗?

能。被双引号包裹的字段可以包含逗号、制表符和换行。字段内的字面引号写成两个引号,这是 RFC 4180 的约定。

列名重复会怎样?

后面的值会覆盖前面的,因为 JavaScript 对象不能有两个同名键。介意的话先改表头。

为什么建议 ID 列保持字符串?

一旦变成数字,前导零就没了——007 会变成 7。除非这一列确实要参与算术,否则别开数字转换。

有大小限制吗?

只受浏览器内存限制。几 MB 的 CSV 转换通常远低于一秒。

列名重复会怎样?

后面的列会静默覆盖前面的。转换前先在源文件里把重名列改掉。

能生成嵌套 JSON 吗?

不能。CSV 本身就是平的;像 user.name 这种带点的表头,在这里仍然是平铺的字符串,不会变成嵌套对象。