为什么将 JSON 转换为 CSV?
JSON 是 Web API 和配置的事实标准,而 CSV(逗号分隔值)是电子表格、数据分析和数据库导入的通用格式。在两者之间转换是一项基础的数据工程任务。
何时需要 JSON 转 CSV:
- 将 API 数据导出到 Excel 或 Google Sheets 进行分析
- 将 Web 应用程序数据加载到数据库表中
- 从 JSON 结构的数据源创建报告
- 与非技术利益相关者共享结构化数据
- 将数据输入期望表格格式的机器学习管道
JSON 结构与 CSV 映射
扁平 JSON 数组(简单情况)
[
{"id": 1, "name": "Alice", "email": "alice@example.com"},
{"id": 2, "name": "Bob", "email": "bob@example.com"}
]
直接映射为 CSV:
id,name,email
1,Alice,alice@example.com
2,Bob,bob@example.com
嵌套对象(挑战)
[
{
"id": 1,
"user": {"name": "Alice", "age": 28},
"address": {"city": "NYC", "country": "US"}
}
]
处理嵌套的选项:
- 展平:
user.name、user.age、address.city、address.country - JSON 字符串化:将嵌套对象作为 JSON 字符串保留在 CSV 单元格中
- 忽略:省略嵌套对象
展平通常是分析的首选。
对象中的数组(挑战)
[
{"id": 1, "name": "Alice", "tags": ["admin", "editor"]}
]
选项:
- 连接:
"admin,editor"(单个单元格中以管道或逗号分隔) - 每个值一行:为每个 JSON 对象创建多行 CSV
- 多列:
tag1、tag2等
CSV 格式规范(RFC 4180)
基本规则
- 字段用逗号分隔
- 记录用换行符分隔(RFC 4180 中为 CRLF)
- 可选的标题行
- 字段可以用双引号括起来
- 引号内的字段可以包含逗号和换行符
- 要包含双引号:
""(通过双写转义)
常见变体
CSV 并非完全标准化。变体包括:
- 分隔符:制表符(
\t)、分号(;)、管道(|)代替逗号 - 引号字符:单引号或无引号
- 行尾:LF(Unix)与 CRLF(Windows)
- 编码:UTF-8、带 BOM 的 UTF-8、Latin-1
Microsoft Excel 在许多欧洲区域设置中使用分号作为默认分隔符(其中逗号是小数分隔符),导致无数 CSV 解析问题。
处理特殊情况
空值
{"id": 1, "name": null, "email": ""}
Null 和空字符串都表示为空的 CSV 单元格,但语义不同。
布尔值
JSON 中的 true 和 false 在 CSV 中变为字符串 "true" 和 "false",除非显式转换。
数值精度
JSON 数字可以表示任意精度的浮点数。CSV 将其作为字符串传输。注意往返过程中浮点精度损失。
Unicode 和特殊字符
所有 Unicode 字符都应保留。包含逗号、引号或换行符的单元格必须正确引用。
程序化转换
JavaScript
function jsonToCsv(data) {
const headers = Object.keys(data[0]);
const rows = data.map(obj =>
headers.map(h => JSON.stringify(obj[h] ?? '')).join(',')
);
return [headers.join(','), ...rows].join('\n');
}
Python (pandas)
import pandas as pd
import json
with open('data.json') as f:
data = json.load(f)
df = pd.json_normalize(data) # 处理嵌套对象
df.to_csv('output.csv', index=False)
命令行 (jq)
jq -r '["id","name","email"], (.[] | [.id, .name, .email]) | @csv' data.json
使用 JSON 转 CSV 转换器
我们的工具:
- 粘贴 JSON 数据 — 对象数组或单个对象
- 配置选项 — 分隔符选择、引号处理、嵌套对象策略
- 预览输出 — 下载前查看 CSV 表格
- 处理数组 — 选择如何表示数组值
- 下载 CSV — 获取文件,准备用于 Excel 或数据库导入
- 复制到剪贴板 — 直接粘贴到电子表格中
该工具自动处理边缘情况:正确引用包含逗号的字段、转义双引号,以及从不一致的 JSON 对象中保持列顺序一致。