← 返回 JSON 工具

JSON 转 CSV

最后更新:2026年10月1日

把 JSON 对象数组转换为 CSV 表格。每个对象成为一行,键成为列,输出按电子表格期望的规则加引号——全部在浏览器中完成,数据不会离开本机。

在浏览器中运行 无需上传 遵循 RFC 4180 适配 Excel 的 BOM 开源(MIT)

这个转换做了什么

CSV 文件是一张用纯文本写成的表:每行一条记录,单元格之间用分隔符隔开,最上面一行给出列名。JSON 没有这种形状。两者最自然的交点是对象数组——每个对象是一条记录,它的键就是字段名。API 返回列表时正是这个布局,所以本转换器优先接受它。

给定 [{"id":1,"name":"Ada"},{"id":2,"name":"Grace"}],输出是表头行 id,name,随后是两行 1,Ada 和 2,Grace。除了下面的规则外,不会重排,也不会改写任何值。

哪些 JSON 形状能变成表

“并集”这个细节很重要。如果部分记录有 phone 键而另一些没有,表头仍会包含 phone,那些没有该键的行对应单元格留空——这一列不会被丢弃。直接的后果是:结构不统一的 JSON 会生成列很多、但大量单元格为空的表。

嵌套值会变成文本

一个单元格只能放文本,所以值里嵌套的对象或数组会以紧凑 JSON 写进单元格。{"address":{"city":"London"}} 会变成单元格 {"city":"London"}。信息还在,但不再是结构化的:本转换器不会把 address.city 拆成带点的列。如果你想要带点的列,请先展平 JSON——那是数据建模的取舍,不是格式化的问题。

引号、分隔符与行尾

输出遵循 RFC 4180,也就是所有电子表格和 CSV 库共同遵守的规则:

分隔符由你选择。默认是逗号,但在以逗号作小数点的系统上,选分号更稳妥,否则以逗号分隔的文件在那里会有歧义。制表符和竖线适合本身已经含有逗号的数据。

让 Excel 干净地打开文件

Excel 不会无条件按 UTF-8 读取:对一个没有字节顺序标记的 .csv,它会猜测编码,而且经常猜成旧代码页,把重音字母和中文变成乱码。为 Excel 添加 BOM 选项会在下载文件的开头加上三字节的 UTF-8 标记,让 Excel 正确解码。它只作用于下载文件,页面上显示的文本保持干净。

CSV 无法带回的东西

CSV 是文本格式,是有损的。它会忘记哪些值原本是数字、布尔值或 null,也会把嵌套压平为文本。null 和空字符串都会变成空单元格,数字会变成它的字面。转回 JSON 时,除非在另一页开启类型识别,否则得到的是字符串——即便开启了,像 007 这样的编码也必须保持字符串以保留前导零。类型重要时请保留原始 JSON;把 CSV 当作导出,而不是主副本。

常见问题

什么样的 JSON 可以转换成 CSV?

CSV 是一张表,所以最自然的输入是对象数组:每个对象成为一行,它的键成为列。行数组会原样作为行使用,单个对象成为一行,普通值的数组成为单列。除此之外——单独的数字、字符串或 null——都不是表格,会被拒绝。

当对象的键不一致时会怎样?

表头是数组中所有出现过的键的并集,按首次出现的顺序排列。缺少某个键的行,对应单元格留空。这就是为什么从结构不统一的 JSON 生成的 CSV 里,很多行的某些列会是空白。

嵌套的对象和数组如何处理?

CSV 没有嵌套,所以本身是对象或数组的值,会以紧凑 JSON 文本的形式写进单元格。信息保留了,但不再是结构化的——这个转换是通过字符串化来展平,而不是把嵌套键拆成带点的列名。

字段什么时候会加引号?

当字段包含分隔符、双引号、换行,或首尾有空白时,就会加引号。引号内的字面双引号会写成两个,从而精确还原原文。这是 RFC 4180 的规则,也是单个单元格能容纳逗号或换行的原因。

为什么我的 CSV 在 Excel 里显示为乱码?

Excel 会猜测 .csv 文件的编码,如果没有字节顺序标记,它常常猜成旧代码页,从而把非 ASCII 文本(如重音字母或中日韩文字)弄乱。勾选 BOM 选项会在下载的文件开头加上 U+FEFF,让 Excel 按 UTF-8 解码。BOM 只加到下载文件里,不影响页面上显示的文本。

JSON 转 CSV 是无损的吗?

不是。CSV 存储的是文本,所以它会忘记哪些值原本是数字、布尔值或 null,也无法表示嵌套(只能写成文本)。把 CSV 再转回 JSON 时,除非开启类型识别,否则得到的是字符串。如果需要精确还原类型,请保留原始 JSON。

想要相反方向?CSV 转 JSON 可以把一张表读回对象数组。发现错误?联系我们。