🐍 如何使用 Python 将 JSON 转换为 CSV:完整教程与代码示例
在日常数据处理中,我们经常会遇到需要把 JSON 格式数据转换为 CSV 表格 的场景,比如导出接口数据、分析日志文件、或导入 Excel 进行可视化。
本文将介绍如何使用 Python 高效地完成 JSON → CSV 的转换,并给出几种常见的实现方式。
📘 一、JSON 与 CSV 的区别
| 特性 | JSON | CSV |
|---|---|---|
| 数据结构 | 树状、嵌套结构 | 平面表格 |
| 可读性 | 机器与人类皆可读 | 人类易读、结构简单 |
| 常用场景 | Web 接口、API、配置文件 | Excel、数据库导入导出 |
| 典型文件扩展名 | .json | .csv |
当你想在电子表格中查看或分析接口返回的 JSON 数据时,就需要将其转换为 CSV。
⚙️ 二、使用 Python 的标准库实现 JSON 转 CSV
Python 自带了强大的 json 和 csv 标准库,可以直接完成转换,无需安装额外依赖。
示例 1:基础版(平面结构 JSON)
import json
import csv
# 读取 JSON 文件
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 打开 CSV 文件准备写入
with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
# 写入表头(从第一个元素的 key 提取)
header = data[0].keys()
writer.writerow(header)
# 写入每一行数据
for row in data:
writer.writerow(row.values())
print("✅ JSON 已成功转换为 CSV:output.csv")输入示例:[
{"name": "Alice", "age": 25, "city": "Shanghai"},
{"name": "Bob", "age": 30, "city": "Beijing"}
]输出结果(CSV):name,age,city
Alice,25,Shanghai
Bob,30,Beijing🧩 三、处理嵌套(Nested)JSON
如果你的 JSON 含有嵌套对象或数组,就需要先"展开"结构。
示例 2:使用 pandas.json_normalize()
import pandas as pd
import json
# 读取嵌套 JSON
with open('nested.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 将嵌套结构展开为平面表格
df = pd.json_normalize(data)
# 导出为 CSV
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
print("✅ 嵌套 JSON 已成功转换为 CSV:output.csv")示例输入:[
{
"user": {"name": "Alice", "id": 101},
"stats": {"score": 98, "level": 3}
},
{
"user": {"name": "Bob", "id": 102},
"stats": {"score": 87, "level": 2}
}
]输出结果:user.name,user.id,stats.score,stats.level
Alice,101,98,3
Bob,102,87,2✅ 提示:pandas.json_normalize() 会自动将嵌套字段扁平化,非常适合复杂 JSON。🚀 四、从 URL 读取 JSON 并导出为 CSV
你还可以直接从远程接口(如 API)加载 JSON 数据:
import requests
import pandas as pd
url = "https://jsonplaceholder.typicode.com/users"
data = requests.get(url).json()
df = pd.json_normalize(data)
df.to_csv('users.csv', index=False, encoding='utf-8-sig')
print("✅ 已从 URL 读取 JSON 并导出 CSV")🧠 五、常见问题(FAQ)
1️⃣ 文件乱码怎么办?→ 使用 encoding='utf-8-sig' 保存 CSV,确保 Excel 打开正常显示中文。
→ 如果 JSON 是单对象(如 {}),可手动包一层数组,例如:
data = [data]3️⃣ 如何导入 Excel?
→ 在 Excel 中点击「数据」→「自文本/CSV」→ 选择输出文件即可。
🧰 六、完整项目示例
如果你需要一个命令行工具,可以写成:
# json2csv.py
import sys
import pandas as pd
def json_to_csv(input_file, output_file):
df = pd.read_json(input_file)
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f"✅ {input_file} 已转换为 {output_file}")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("用法: python json2csv.py input.json output.csv")
else:
json_to_csv(sys.argv[1], sys.argv[2])执行:
python json2csv.py data.json output.csv🧭 七、总结
| 工具 | 适用场景 | 优点 |
|---|---|---|
csv + json | 简单 JSON | 标准库、零依赖 |
pandas | 嵌套 JSON、大文件 | 功能强大、支持批量处理 |
requests | 网络数据 | 可直接抓取 API |
如果你只是偶尔转换,可以使用在线工具 👉 JsonWork.com/json-to-csv
无需安装 Python,支持 粘贴 / 上传 / 下载,100% 本地处理,更安全便捷。
发布于 2025年10月5日