数据与表格

CSV 与 JSON 互转

粘贴或打开 CSV 文件得到 JSON,反过来也行。引号字段、单元格里的换行、分号分隔的导出文件,以及中文 Excel 存出来的 GBK 编码文件,都能正确处理。

全部在你的浏览器里运行,这里输入的内容不会上传。

怎么用

  1. 先选方向:CSV → JSON 或 JSON → CSV。
  2. 粘贴数据,或者点打开文件…载入 .csv、.tsv、.txt、.json 文件。打开 .json 文件时会自动切换到 JSON → CSV。
  3. 输入是 CSV 时,分隔符一般保持自动识别即可;再确认第一行是不是列名。如果希望所有值都保持文本,就取消勾选识别数字和 true/false。
  4. 点转换。状态栏会显示识别出多少条记录、多少列、用的是哪种分隔符,表格预览可以用来确认各列有没有错位。
  5. 复制结果,或者下载成 data.json、data.csv。

打开文件后如果中文变成乱码,请在文件编码里手动选择。中文版 Excel 另存的「CSV(逗号分隔)」通常是 GBK 编码,自动模式会先按 UTF-8 解码,失败后改用 GBK。

CSV 是怎么解析和生成的

CSV 的格式由 RFC 4180 描述:每行一条记录,字段之间用逗号分隔;字段里如果含有逗号、双引号或换行,整个字段必须用双引号括起来,字段内部的双引号要写成两个。所以 he said "hi" 在文件里存成 "he said ""hi"""。本工具的解析器逐字符读取,严格按照这些规则处理,所以地址字段里带引号的换行不会把一条记录拆成两条。

兼容的变体

  • 分隔符。 欧洲很多地区的 Excel 用分号分隔,因为那里的逗号是小数点;制表符和竖线分隔的文件也很常见。自动识别会在前 20 行里、引号字段之外,统计每种候选符号出现的次数,选出每行出现次数都一致的那一个。
  • BOM。 Excel 存为「CSV UTF-8」时,文件开头会多出三个看不见的字节(EF BB BF)。解析时会去掉它们,不会混进第一列的列名里。
  • 换行符。 Windows 的 CRLF、Unix 的 LF、老式 Mac 的 CR 都能识别,记录之间的空行会被跳过。
  • 编码。 打开文件时先按严格的 UTF-8 解码,失败后在中文页面按 GBK(GB18030)解码。GB18030 是 GBK 的超集,用它读 GBK 文件结果相同。也可以手动选择 Shift_JIS 或 Windows-1252。

从文本到 JSON 类型

CSV 本身没有类型,所有字段都是文本。勾选识别数字和 true/false 后,写法像数字的字段会变成 JSON 数字,true 和 false 会变成布尔值。但有两种情况会刻意保持文本,因为转换会改坏数据:一是带前导零的数字,比如 007、邮政编码 010020;二是超出 JavaScript 精确表示范围(大于 9007199254740991)的整数,比如 18 位身份证号或者长账号。

从 JSON 到 CSV

JSON 可以嵌套,CSV 不行。嵌套对象会被展开成用点号连接的列名,比如 {"a": {"b": 1}} 会变成名为 a.b 的一列;数组则作为一段 JSON 文本写进同一个单元格。列是所有记录中出现过的键的并集,按首次出现的顺序排列,所以某条记录缺少某个字段时,对应单元格留空,后面的列不会错位。输出按 RFC 4180 的规定一律使用 CRLF 换行,只在必要时加引号。

示例

下面这段 CSV 里有带逗号的引号字段、双写的引号,换行符是 CRLF:

a,b
"x, y","he said ""hi"""

第二行解析为两个字段:x, y 和 he said "hi"。

打开类型识别时,表头 n,v 加上 x,1、y,true、z, 三行,会转换成:

[
  { "n": "x", "v": 1 },
  { "n": "y", "v": true },
  { "n": "z", "v": "" }
]

007 保持为 "007",12345678901234567890 也保持为字符串,而 1.50 变成 1.5,-2e3 变成 -2000。重复或空白的表头会被重新命名,保证数据不丢:表头 a,a, 会得到 a、a_2、column_3 三个键。

反方向:JSON [{"a":1,"b":"x,y"},{"a":2,"c":"z"}] 会变成:

a,b,c
1,"x,y",
2,,z

而 [{"a":{"b":1,"c":{"d":2}},"e":[1,2]}] 会得到 a.b、a.c.d、e 三列,数据行是 1,2,"[1,2]"。

一个用 GBK 编码保存、内容为「姓名,城市」和「张三,北京」的文件,打开时会先按 UTF-8 解码失败,再自动按 GBK 解码,得到正确的中文。

局限

  • 展开是单向的。 把 CSV 转回 JSON 时,不会根据带点号的列名重建嵌套结构,得到的是 "a.b" 这样的扁平键名。
  • 电子表格公式。 以 =、+、-、@ 开头的单元格,在 Excel 里打开时可能被当作公式执行。如果数据来自不可信的用户,在用 Excel 打开之前请先检查。
  • 日期按原样保留。 CSV 没有日期类型,本工具也不去猜。03/04/2025 在美国和欧洲表示不同的日期,所以原样保留为文本,由你自己判断。
  • 编码识别只是尽力而为。 如果一个文件恰好也是合法的 UTF-8,但原本是按别的编码写的,程序无法自动分辨。结果不对时请手动选择编码。
  • 文件大小。 在笔记本电脑上,几十万行大约一秒内转完;预览只显示前 200 行,以保证页面流畅。

常见问题

为什么 CSV 用 Excel 打开后中文是乱码?

Excel 打开没有 BOM 的 CSV 时,会按系统的旧编码(中文系统上是 GBK)去读。JSON 转 CSV 时保持勾选添加 BOM,Excel 就能正确识别 UTF-8 中文。

反过来,我的 CSV 是中文 Excel 存的,打开是乱码怎么办?

那个文件多半是 GBK 编码。自动模式会先按 UTF-8 解码,失败后改用 GBK;如果结果仍然不对,在「文件编码」里手动选 GBK。

为什么 007 转换后还是字符串?

把它变成数字 7 会丢失信息。带前导零的值通常是编号、商品代码或邮编,所以保留为文本。身份证号这类超长数字也一样。

嵌套的 JSON 对象怎么处理?

展开成用点号连接列名的多列,比如 address.city。数组会作为 JSON 文本写进一个单元格。

文件会被上传吗?

不会。文件在你的浏览器里读取和转换,结果也是在你的设备上生成的。

参考资料

用到这个工具的指南

↵ 打开 · Esc 关闭