Python JSON转CSV教程:list[dict]一键导出表格
把Python JSON数据转成CSV表格,用csv模块或pandas to_csv两种方式,自动对齐所有字段为列,支持嵌套字段打平,附完整代码。
场景痛点
接口返回的是JSON数组,产品说"给我个Excel看看";爬虫爬下来一堆JSON,老板要CSV做透视表。JSON是嵌套结构,CSV是平表格,手动把每个字段抠出来填到Excel里,几十条还行,几千条就废了。用Python自动把所有key展开成列。
用到的库
pip install pandas
完整代码
# Python JSON转CSV
import csv
import json
import pandas as pd
def json_to_csv_with_pandas(json_path, csv_path):
"""
pandas一行搞定:读JSON -> 转DataFrame -> 写CSV。
自动把所有dict的key并集作为列。
"""
with open(json_path, "r", encoding="utf-8") as f:
data = json.load(f)
# 如果根是{"data": [...]}这种包装,取data
if isinstance(data, dict) and "data" in data:
data = data["data"]
df = pd.DataFrame(data)
# 把list/dict类型的字段转成字符串,否则CSV写不进去
for col in df.columns:
if df[col].apply(lambda x: isinstance(x, (list, dict))).any():
df[col] = df[col].apply(lambda x: json.dumps(x, ensure_ascii=False))
df.to_csv(csv_path, index=False, encoding="utf-8-sig")
print(f"pandas转换完成:{csv_path},{len(df)} 行,{df.shape[1]} 列")
def json_to_csv_with_csv_module(json_path, csv_path):
"""
标准库csv方式,不依赖pandas。
自动收集所有记录的key作为表头。
"""
with open(json_path, "r", encoding="utf-8") as f:
data = json.load(f)
if isinstance(data, dict) and "data" in data:
data = data["data"]
# 收集所有出现过的key,保持顺序
all_keys = []
seen = set()
for item in data:
if isinstance(item, dict):
for k in item.keys():
if k not in seen:
seen.add(k)
all_keys.append(k)
with open(csv_path, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=all_keys, extrasaction="ignore")
writer.writeheader()
for item in data:
# list/dict字段转JSON字符串
row = {}
for k, v in item.items():
if isinstance(v, (list, dict)):
row[k] = json.dumps(v, ensure_ascii=False)
else:
row[k] = v
writer.writerow(row)
print(f"csv模块转换完成:{csv_path},{len(data)} 行,{len(all_keys)} 列")
def main():
json_file = "data.json"
json_to_csv_with_pandas(json_file, "output_pandas.csv")
json_to_csv_with_csv_module(json_file, "output_stdlib.csv")
if __name__ == "__main__":
main()
代码讲解
pd.DataFrame(data)接受list[dict],自动把所有key并集作为列,缺的填NaN。- 接口常返回
{"code":0, "data":[...]}这种包装,先把data字段取出来。 - list/dict类型的嵌套字段没法直接写CSV,先
json.dumps序列化成字符串存进去。 - 标准库方式用
csv.DictWriter,fieldnames是所有key的并集,extrasaction="ignore"忽略多余字段。 - 表头收集时用
seen集合去重,保持第一次出现的顺序。
运行结果
当前目录生成两个CSV文件,列就是JSON里每条记录的所有字段。打开Excel能看到表格化的数据,嵌套字段那一列是JSON字符串,需要展开看"嵌套JSON打平"那篇。
注意事项
- 嵌套很深的JSON直接转CSV会很难看,先打平再转,看"嵌套JSON展开打平"那篇。
- 时间字段是ISO字符串,想转成Excel认的格式再
pd.to_datetime处理。 - 某些记录缺字段时CSV里该单元格为空,这是正常的。
- 数据量超过10万条时pandas方式更省代码,标准库方式更省内存。
![Python JSON转CSV教程:list[dict]一键导出表格](/d/file/p/c8/ed/48892.jpg)
更新时间:2026-09-14 20:58:48
上一篇:Python嵌套JSON展开打平教程:扁平化嵌套字段