JSON 转 Excel / CSV
直接粘贴 JSON 数组或 API 响应,选择字段后下载 Excel 或 CSV
文件仅在浏览器内读取,不上传。支持顶层对象数组或含记录数组的 API 响应;大整数 ID 请保存为字符串。
嵌套对象及数组作为 JSON 文本保存;缺失值留空。公式防护选项只影响 CSV,Excel 中字符串保持文本类型。
JSON 转 CSV:表头怎么定、字段怎么转义、嵌套对象会怎样
转换规则:表头取所有键的并集
工具先扫过数组里的每一个对象,收集出现过的所有键,按首次出现的顺序作为列。这一点很重要:
- 如果只取第一个对象的键,那么第一项没写某个字段、后面写了,这一列就会整列丢失。
- 取并集可以保证所有字段都被保留,代价是某些行会出现空单元格(该行没有这个键)。
所以对象之间字段不一致时不丢数据,但空单元格是预期行为而不是 bug。如果希望输出严格对齐,应该先在数据层做归一化,保证每个对象都有全部字段。
转义规则(RFC 4180)
CSV 看起来只是逗号分隔的文本,其实有明确的转义规则。工具按标准处理:
| 字段内容 | 输出 |
|---|---|
| 普通文本 | 原样 |
含分隔符,如 a,b | "a,b" — 整体加双引号 |
含双引号,如 say "hi" | "say ""hi""" — 引号加倍并整体包起来 |
| 含换行 | 整体加双引号,换行保留在引号内 |
| 空字符串 | "" — 与"该字段不存在"区分开 |
不按这个规则转义的后果很严重:一个含逗号的字段会让整行的列数错位,后面所有列都串位;而含引号又未加倍会让解析器提前结束引号范围,把后面的内容吞掉。手动拼接 CSV 几乎必然踩到这两条,这也是本工具存在的意义。
嵌套对象和数组的限制
这是最需要提前知道的一点:CSV 只有二维结构,嵌套无法直接表达。
新版中英文导出器会把嵌套对象和数组序列化为单元格内的 JSON 文本,不会自动展开为多列。可直接粘贴 JSON,也可导入最多 2 MiB 的本地 UTF-8 JSON 文件。点击“读取字段”,选择记录数组及字段,再转换和下载。粘贴输入使用相同大小限制,最多 20,000 条记录、500 个字段。导入只有在确认替换且校验成功后才改变原输入。
处理嵌套字段有三条路:
- 先扁平化。把
{"user":{"name":"Bob"}}转成{"user.name":"Bob"},列名用点号连接。jq的flatten或类似处理可以做这件事。 - 序列化后放进单元格。把嵌套值转成 JSON 字符串塞进一个单元格,保持可逆但不可读,也失去了在 Excel 里排序筛选的能力。
- 拆表。主从结构分别导出成两张表,用外键关联。这是最符合关系模型的解法,适合要导入数据库的场景。
选哪条取决于下游用途:给人看和透视 → 扁平化;给程序还原 → 序列化;入数据库 → 拆表。
分隔符的选择与中文乱码
工具支持逗号、分号、Tab 和竖线四种分隔符:
- 逗号。默认选项,通用性最好。
- 分号。不少欧洲地区的 Excel 默认用分号作为列表分隔符(因为逗号被用作小数点)。如果你的用户在欧洲,产出分号版本能避免"整行挤在一列"的问题。
- Tab。实际产出的是 TSV,粘贴进 Excel 或表格软件时不需要任何导入向导,会直接分列——这是"快速贴进表格"最省事的做法。
- 竖线。内容里常含逗号时的替代方案。
关于中文乱码:CSV 文件本身不带编码信息。双击打开时,Excel 在 Windows 上会按系统默认代码页(简体中文环境下是 GBK)去读 UTF-8 文件,中文就会显示成乱码。三种解决办法:
- 不要双击,用 Excel 的"数据 → 从文本/CSV"导入,在向导里显式选择 UTF-8。这是最可靠的做法。
- 让文件带上 BOM(字节顺序标记
EF BB BF),Excel 见到 BOM 会正确识别 UTF-8。代价是其他一些工具会把 BOM 当成数据的一部分,导致第一列列名多出不可见字符。 - 导出后用文本编辑器改存为带 BOM 的 UTF-8。
工具怎么用
- 粘贴 JSON 对象数组,或包含对象数组的 API 响应。如果找到多个记录数组,可以选择要导出的数组。
- 选分隔符,点转换。
- 用复制按钮取走结果。
每一行都必须是对象。null、标量行和数组行会被拒绝,而不是静默跳过。修改输入后请重新读取并选择字段。下载文件为带 BOM 的 UTF-8,复制结果不带 BOM。默认对公式样式单元格添加单引号前缀,这会改变文本,请在使用前核对结果。全部处理在本地完成。
常见问题
每个对象的键不一样怎么办?
表头取所有键的并集,某一行缺的字段留空。这样导出的 CSV 列数一致,可直接用 Excel 打开。
为什么有的单元格被引号包住?
只要内容里出现分隔符、双引号或换行,就必须加引号,否则会被 CSV 解析器拆错列。