JSON 转 CSV 转换器
将 JSON 对象数组粘贴到左侧,得到正确加引号的 CSV。表头从对象键生成,本地运行 — 无需上传。
- 将 JSON 对象数组粘贴到左侧文本区。
- 点击「转换为 CSV」。表头由所有对象键的并集生成。
- 复制结果,或下载为 data.csv。
- 嵌套值会被 JSON 字符串化 — 若需要扁平列,请先在外部展平。
它能做什么?
将 JSON 对象数组转换为 RFC 4180 CSV。表头是所有对象键的并集。包含逗号、引号或换行的值会自动加引号。数字和布尔值不带引号输出;null 与 undefined 变成空字段。嵌套值(对象、数组)会被 JSON 字符串化为单个加引号字段 — CSV 不能原生表达层级。
示例
JSON 输入:
[
{"name":"Ada","age":36,"role":"engineer"},
{"name":"Grace","age":40,"role":"scientist"}
] CSV 输出:
name,age,role
Ada,36,engineer
Grace,40,scientist 常见 JSON 转 CSV 陷阱
CSV 是扁平格式。多数「奇怪」的输出都来自无法用扁平结构表示的 JSON 形状。
- 顶层不是数组。 JSON 对象 `{"a":1,"b":2}` 不能直接转 CSV — 用数组包起来: `[{"a":1,"b":2}]`。结果会有一行表头和一行数据。
- 不同行键不一致。 若第一个对象有 `{a,b}`、第二个有 `{a,c}`,表头为并集 `a,b,c`。缺失键的行输出空字段。需要更严格的模式请先预处理。
- 嵌套值被静默扁平化。 `{"address":{"city":"NY"}}` 这样的字段会变成单个 CSV 列,值是 JSON 字符串 `{"city":"NY"}`。如果想要分开的 `address.city` 列,请先在 JavaScript 里展平: `{address_city: row.address.city}`。
- 值中嵌入换行。 JSON 值中的多行字符串会变成加引号的 CSV 字段,引号内含字面量 `\n`。多数表格软件能正确处理;一些老旧工具不行。
- 表头含特殊字符。 含逗号、引号或换行的 JSON 键虽能工作,但部分 CSV 消费者解析时会出问题。需要最大兼容性时,转换前请把键名改为字母数字加下划线。
- JSON 末尾的逗号。 `[{"a":1},]` 是无效 JSON(末尾元素后多了逗号)。解析器在 CSV 步骤之前就会拒绝。多数 JSON 格式化器会去掉它 — 必要时先过 `/json-prettifier`。
常见问题
如何获得制表符分隔输出(TSV)?
本页输出逗号分隔的 CSV。要 TSV,可把结果中的 `,` 替换为 `\t`,或在命令行用 `delimiter: "\t"` 调用 PapaParse — 同一个库。
表头里的键顺序会保留吗?
会。表头按键在所有对象中首次出现的顺序排列。需要按字母排序就在粘贴前先对 JSON 排序。
日期如何处理?
JSON 没有原生 Date 类型 — 日期通常已经被序列化为 ISO 8601 字符串,这些会原样通过。若 JSON 是通过 JSON.stringify 得到的 Date 对象,该处此前已转为 ISO 字符串。
能 JSON → CSV → JSON 来回转换吗?
对于扁平的「对象数组」数据可以。字符串保持字符串、数字保持数字(在 PapaParse 启用动态类型时)。嵌套值在 CSV 阶段丢失结构,回来时是 JSON 字符串字段而非嵌套对象。
我的 JSON 会被上传吗?
不会。一切都在浏览器里跑 — 你的 JSON 由本页 JavaScript 解析与转换,不发送到任何服务器。可在浏览器开发者工具中验证。
可以转多大的 JSON 文件?
约 50 MB 后浏览器文本框开始变慢。转换本身随输入线性扩展,瓶颈在渲染。更大文件请用命令行版 PapaParse。