JSON 转成 CSV 以后,为什么数据看不全了?
树形结构压进矩形表格,必然丢信息,而且不会报错。
因为两种格式的几何形状根本不同:JSON 是树,可以层层嵌套;CSV 是矩形,只有行和列。要把树压进矩形,就必须砍掉一部分结构,而这个过程不会弹任何提示——数据是在你不知情的情况下消失的。
具体丢在四个地方。第一是嵌套对象的扁平化不可逆:嵌套的键会被拼成点号列名,而 JSON 的键名本身允许含点号,所以两份不同的文档可能压出同一个列名,回程再也分不清。第二是数组:数组会按索引铺成多个列,列集是所有记录取并集,于是大多数记录都有空格子,而空格子什么都不代表。第三是三种空态合并:显式 null、空字符串、键根本不存在,在 CSV 里都是同一个空白格,人们最在意的「知道是没有」与「根本没问过」的差别正好消失。第四是列序由工具决定,「按首次出现」和「按字母序」会得出不同文件,跨次对比就失去意义。
把接口返回的 JSON 存成 CSV,准备丢进表格里看,结果发现层级没了、有些字段不见了、有些行大片空白。会怀疑是工具写错了,其实这是转换本身的代价——只是没人提前告诉你代价在哪。
理解丢在哪,才能决定哪些能用、哪些必须回头找原件。转换本身仍然值得做,因为表格软件能开 CSV 却不能开 JSON,只是要清楚它只适合拿来看,不适合拿来当数据源。
1四类丢失,一处比一处隐蔽
每一类都不会报错,但都会影响后续判断。
| 丢失类型 | 表现 | 后果 |
|---|---|---|
| 扁平化不可逆 | 嵌套键被拼成 user.name 这样的列名 | 键名本身含点号时,两份不同文档压出同一份 CSV |
| 数组变参差 | 数组按索引铺成 tags.0 / tags.1 / tags.2 | 列取并集,多数记录填不满,空格含义不明 |
| 三种空态合并 | null、空串、键不存在都是空单元格 | 「知道是没有」和「没问过」被抹平 |
| 列序不确定 | 按首次出现或按字母序都能说得通 | 同一份数据两次导出不同,对比失效 |
0 和 false 反而能保住:它们在 CSV 里是看得见的字符,只有那三种「空」会合并到一起。
2哪些情况能干净转换
判断标准很单一:顶层是不是一个「键一致的对象数组」。
| JSON 形态 | 能否干净转 CSV | 说明 |
|---|---|---|
| 键一致的对象数组 | 能 | 每个对象一行、每个键一列,标准映射 |
| 对象里带嵌套对象 | 需先扁平化 | 嵌套键拼成点号列名,层级关系只剩列名 |
| 对象里带数组 | 有损 | 并成单格、铺成多列、或炸成多行,三选一都有损 |
| 各记录键不一致 | 需补齐 | 应取全部键的并集,只按第一条取键会静默丢列 |
| 外层还包了一层对象 | 需先取出内层数组 | 先定位到真正的行数组,再转换 |
转换前先检查几条代表性记录:数组长度是否一致、有没有缺字段——这两个是 CSV 变乱的真正来源。
3转完必做的四项检查
花几分钟验一遍,能省掉后面很长一段排错时间。
- 核对列数
- 表头应该有全部出现过的键,数量少于预期说明有列被漏掉了,通常是「只按第一条记录取键」造成。
- 抽查含逗号的字段
- 包含逗号、双引号或换行的值必须整体用双引号包裹,内部双引号要翻倍,手写导出最容易漏这一步,会让整份 CSV 错行。
- 留意长数字被改写
- 邮编、编号、身份证这类纯数字字段,表格软件会当数字处理,前导零会消失、超过精度还会变尾数,需要在导入时指定为文本。
- 保留原始 JSON
- CSV 只当阅读和呈现用的副本,需要再加工时回到原件,别让 CSV 变成新的数据源。
顺着这个问题往下用
全部工具总览 →相关疑问
为什么有些列全是空的?
因为列取的是所有记录键的并集。某个键只在少数记录里出现,那这一列在其余行就都是空白。如果某列整列都空,说明转换时读到的键集合和实际数据不一致,通常是取键的规则有问题。
数组为什么变成好几列?
因为 CSV 的一格放不下一个数组。常见做法是按索引拆成 tags.0、tags.1 这样的多列,但数组长度不一致时列数只能取最长的那条,短数组的记录就留下空白格。也可以改成用分隔符并成一格,或者把每条元素炸成独立行。
来回转换能还原吗?
基本不能。嵌套结构被扁平化、类型信息被抹成文本、三种空态合并成一种,这些损失都没有对应记录可依。想往返无损,需要额外保存一份字段类型说明,在导回时按它重铸。
数字为什么变成了字符串?
CSV 没有类型系统,所有单元格都是文本。数字、布尔值、null 写进文件后都不再区分,等读回来时由读取方猜测。要保住类型,得靠外部约定或改用保留类型的格式。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-09。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱