我的知识记录

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.DictWriterfieldnames 是所有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]一键导出表格

标签:

更新时间:2026-09-14 20:58:48

上一篇:Python嵌套JSON展开打平教程:扁平化嵌套字段

下一篇:Python JSON批量导出Excel教程:多Sheet或单Sheet