区分两种 JSON 结构:
JSON 数组:
[ {...}, {...} ],每条对象代表一行,最适合转 CSV单个 JSON 对象:
{...},需要特殊处理嵌套 JSON:对象内部还有子对象 / 数组,需要先展平
方式 1:Python(最通用,推荐)
情况 A:标准 JSON 数组(data.json)
data.json内容示例
json
[
{"name":"张三","age":20,"city":"南京"},
{"name":"李四","age":25,"city":"苏州"}
]
脚本 json2csv.py
python
运行
import json
import csv
# 读取json
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
# 写入csv
if data:
headers = list(data[0].keys())
with open("output.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
writer.writerows(data)
print("转换完成 output.csv")
运行:python json2csv.py
utf-8-sig防止 Excel 打开中文乱码。
情况 B:JSON 嵌套对象(有子对象)
示例:
json
[
{"name":"张三","info":{"age":20,"city":"南京"}}
]
需要先展平嵌套 key,使用pandas最简单:
python
运行
import pandas as pd
import json
with open("data.json","r",encoding="utf-8") as f:
data = json.load(f)
# normalize自动展开嵌套对象
df = pd.json_normalize(data)
df.to_csv("output.csv", index=False, encoding="utf-8-sig")
安装依赖:pip install pandas
情况 C:JSON 不是数组,外层是对象,数据在某个 key 下
样例文件:
json
{
"code":0,
"list":[
{"name":"张三"},
{"name":"李四"}
]
}
取data["list"]再传给json_normalize:
python
运行
data = json.load(f)
df = pd.json_normalize(data["list"])
方式 2:命令行工具 jq(Linux/macOS/WSL)
jq 是处理 json 神器,适合流水线。
bash
# json数组转csv
jq -r '.[] | [.name,.age,.city] | @csv' data.json > output.csv
缺点:需要手动列出字段;嵌套 json 也需要手动展开。
方式 3:在线工具(临时少量文件,不建议敏感数据)
⚠️不要上传包含密码、密钥、业务敏感数据的文件到在线网站。
方式 4:Node.js 版本
javascript
运行
const fs = require('fs');
const data = JSON.parse(fs.readFileSync("data.json","utf8"));
const headers = Object.keys(data[0]);
const lines = [headers.join(",")];
for(const row of data){
const line = headers.map(k=> `"${String(row[k]).replace(/"/g,'""')}"`).join(",");
lines.push(line);
}
fs.writeFileSync("output.csv", lines.join("\n"), {encoding:"utf8"});
常见踩坑点
中文乱码:输出 csv 使用
utf‑8‑sig编码,Excel 打开才正常。字段包含逗号、双引号:csv 标准要求字段用双引号包裹,上面
csv.DictWriter、pandas 会自动处理;手写拼接字符串很容易出错。JSON 数组内部有数组:例如
tags: ["a","b"],csv 单元格无法存数组,一般转为逗号拼接字符串"a,b"。大 JSON 文件(GB 级别):上面代码是一次性全部读入内存,大文件需要流式逐行解析。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢