易君召
发布于 2026-08-07 / 作者:易君召 / 2 阅读
0

JSON 转 CSV 几种常用方案

区分两种 JSON 结构:

  1. JSON 数组[ {...}, {...} ],每条对象代表一行,最适合转 CSV

  2. 单个 JSON 对象{...},需要特殊处理

  3. 嵌套 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"});

常见踩坑点

  1. 中文乱码:输出 csv 使用utf‑8‑sig编码,Excel 打开才正常。

  2. 字段包含逗号、双引号:csv 标准要求字段用双引号包裹,上面csv.DictWriter、pandas 会自动处理;手写拼接字符串很容易出错。

  3. JSON 数组内部有数组:例如tags: ["a","b"],csv 单元格无法存数组,一般转为逗号拼接字符串 "a,b"

  4. 大 JSON 文件(GB 级别):上面代码是一次性全部读入内存,大文件需要流式逐行解析。


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/json-to-csv-conversion-common-approaches

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/