将 JSON 转为 CSV:把对象数组扁平化

JSON 对象数组映射为 CSV 表格 — 每个对象一行,列来自所有键的并集。真正的难点在于引用规则与嵌套值的处理。

对象数组形状

CSV 是平面表格,所以能干净地转换的 JSON 是对象数组:每个对象成为一行,每个键成为一列。

构造表头

用所有对象键的并集作为表头,而不是只取第一个对象的键,这样多键或少键的记录都能对齐。缺失的单元格留空。

引用规则

任何包含逗号、双引号或换行的值都必须用双引号包起来,并把内部的双引号写成两个,否则列会错位。

嵌套值

对象和数组没有扁平的 CSV 形式,因此可以在单元格里写成 JSON 文本(可逆),也可以拆成 address.city 这样的点号列。

表头顺序与稳定性

对键的并集排序,或者把顺序固定为第一条记录的键,再把多出来的键追加在后面。稳定的表头顺序让多次导出之间的 diff 有意义,避免每次重排列。

日期与数字格式

表格软件会激进地重新解释数值:长数字 ID 会丢精度,ISO 日期会被改格式,前导零会消失。如果一个值必须原样往返,要给它加引号;粘贴到 Excel 时再在前面加一个英文撇号。

Excel 与 Google Sheets 兼容性

用 CRLF 行尾和 BOM(带字节序标记的 UTF-8)让 Excel 识别 Unicode。对 Google Sheets,BOM 是可选的,但逗号作分隔符和双引号转义的规则仍然适用。

从 CSV 转回 JSON

按引号感知的方式拆分行(不要直接按逗号 split),把第一行当作字段名,并尝试按列推断数字、布尔、ISO 日期。本工具的往返过程默认把字符串保留为字符串,除非整列都是数字。

常见陷阱

下面这些问题会让大多数 CSV 导出崩溃。

  • 字符串值里未转义的逗号
  • 单元格里出现换行却没有用引号包裹
  • 编码混用(UTF-8 与 Latin-1)导致乱码
  • 大整数(如 ID)被表格软件悄悄截断
  • 布尔值被存成字符串 "true"/"false" 而不是 TRUE/FALSE