JSON 转 CSV
把 JSON 数组导出成 CSV,自动合并所有行字段作为表头,嵌套值序列化进单元格。
把接口返回的列表给运营或产品看时,JSON 基本没法用,他们需要的是能用 Excel 打开、能排序筛选的表格。把 JSON 数组转成 CSV 就是在做这件事:自动收集所有行出现过的字段作为表头,每个值都加双引号并按 CSV 规范转义,复制或下载后可以直接打开使用。
转换在浏览器本地完成,数据不会上传,含订单号、手机号这类字段的数据集也不出本机。CSV 本身只能表示扁平的二维表,这是格式的限制而不是工具的取舍:嵌套对象和数组会被压成单元格里的一串 JSON 文本,可读性尚可但无法直接做透视,需要分析时建议先打平再转。
表头与行的生成规则
表头取所有行键名的并集,顺序按第一次出现的先后排列,所以某行缺失的字段会留成空单元格,而不是整列消失。所有值都用双引号包裹,值里本来就有双引号会按 CSV 规范写成两个双引号转义。根节点是数组时直接作为数据行;根节点是对象时会先找第一个数组类型的属性作为数据行来源,与之同级的其他字段会被忽略;对象里没有数组属性时,就把它当成一行导出。根节点是数字或字符串这类基本类型会直接报错,数组为空时输出空内容。
嵌套结构会怎样
CSV 只能表达扁平的二维表,嵌套对象和数组在单元格里会被序列化成一行 JSON 文本,花括号和引号都会保留在单元格内。数据本身没丢,但列语义没了:在 Excel 里看到的是一串带括号和转义引号的文本,无法直接筛选、排序或做透视,数据量大时还会撞上单元格字符数上限。要做真正的分析,应该先把嵌套字段打平成 user_name 这样的独立列,或者只导出需要的顶层字段再转换。
导出后的兼容问题
null、缺失字段和空字符串统一输出成空单元格,三者在下游无法区分,需要区分时应在转换前把 null 换成固定标记值。分隔符固定为英文逗号,不提供分号或制表符选项;字段值里如果本来含逗号或换行,因为每格都已加引号,仍然是合法 CSV。另外文件不带字节顺序标记,部分 Windows 版 Excel 直接双击打开含中文的 UTF-8 文件会显示乱码,建议用数据菜单里的从文本或 CSV 导入,显式选择 UTF-8 编码。
常见问题
- 嵌套的对象和数组导出后去哪了?
- 被序列化成 JSON 文本放进了对应单元格,数据没丢但失去了列结构,无法在 Excel 里直接排序或透视。要让嵌套字段可用,先把它打平成一级字段再转,或者只挑需要的顶层字段导出,也可以改用 XML 之类的层级格式。
- 为什么有的列出现空单元格,有的字段整列都不见了?
- 表头取所有行的字段并集,某行没有该字段就填空值,所以不会因为第一行缺字段而丢列。整列消失只有一种情况:根对象里选了数组属性作为数据行来源,其他同级字段被忽略,不参与导出,需要它们时请把数据整理成纯数组再转。
- null 和空字符串在 CSV 里怎么区分?
- 区分不了,两者都输出成空单元格,缺失字段也是同样结果。下游如果必须区分,就在转换前把 null 替换成固定字符串,或者额外加一列标记数据来源,不要依赖空单元格本身携带语义。
- 导出的 CSV 用 Excel 打开中文乱码怎么办?
- 生成的文件是 UTF-8 且不带字节顺序标记,部分 Windows 版 Excel 会按本地编码解析而显示乱码。用数据菜单里的从文本或 CSV 导入,编码选 UTF-8 即可正常;也可以导入后另存为带标记的 UTF-8 CSV,之后直接打开就不会乱码。