JSON 转 CSV
最后更新:2026年10月1日
把 JSON 对象数组转换为 CSV 表格。每个对象成为一行,键成为列,输出按电子表格期望的规则加引号——全部在浏览器中完成,数据不会离开本机。
这个转换做了什么
CSV 文件是一张用纯文本写成的表:每行一条记录,单元格之间用分隔符隔开,最上面一行给出列名。JSON 没有这种形状。两者最自然的交点是对象数组——每个对象是一条记录,它的键就是字段名。API 返回列表时正是这个布局,所以本转换器优先接受它。
给定 [{"id":1,"name":"Ada"},{"id":2,"name":"Grace"}],输出是表头行 id,name,随后是两行 1,Ada 和 2,Grace。除了下面的规则外,不会重排,也不会改写任何值。
哪些 JSON 形状能变成表
- 对象数组——每个对象是一行;表头是所有键的并集。
- 行数组——原样作为行使用,不推断表头,适合你已经排好形状的数据。
- 单个对象——当作一行,键作为表头。
- 值的数组——单列,没有列名。
- 其他任何形式——单独的数字、字符串或
null不是表格,会报错,而不是被悄悄改写。
“并集”这个细节很重要。如果部分记录有 phone 键而另一些没有,表头仍会包含 phone,那些没有该键的行对应单元格留空——这一列不会被丢弃。直接的后果是:结构不统一的 JSON 会生成列很多、但大量单元格为空的表。
嵌套值会变成文本
一个单元格只能放文本,所以值里嵌套的对象或数组会以紧凑 JSON 写进单元格。{"address":{"city":"London"}} 会变成单元格 {"city":"London"}。信息还在,但不再是结构化的:本转换器不会把 address.city 拆成带点的列。如果你想要带点的列,请先展平 JSON——那是数据建模的取舍,不是格式化的问题。
引号、分隔符与行尾
输出遵循 RFC 4180,也就是所有电子表格和 CSV 库共同遵守的规则:
- 只有当字段必须加引号时才加——即它包含分隔符、双引号、换行,或首尾有空白时。
- 引号内的双引号写成两个,从而精确还原原文。
- 行以 CRLF(回车加换行)结尾,即规范指定的那一对字符。
分隔符由你选择。默认是逗号,但在以逗号作小数点的系统上,选分号更稳妥,否则以逗号分隔的文件在那里会有歧义。制表符和竖线适合本身已经含有逗号的数据。
让 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 可以把一张表读回对象数组。发现错误?联系我们。