pandas.read_json()仅支持扁平化列表结构,嵌套或不一致json需先用json.load()检查并提取数据,再用json_normalize()展开;导出excel须安装openpyxl并指定engine,时间与高精度字段应转字符串避免格式错乱。

直接用 pandas.read_json() 读取 JSON,再调用 to_excel() 保存即可,无需额外解析或循环——但前提是 JSON 结构规整;嵌套、不一致字段、混合类型会直接报错或写入异常。
JSON 格式必须是「扁平化列表」才能直读
只有形如 [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}] 这类“同结构字典组成的列表”,read_json() 才能自动转成 DataFrame。如果 JSON 是单个对象(如 {"data": [...]})、多层嵌套、或键值类型不统一(比如某条记录 "score": 95,另一条 "score": "N/A"),就会出问题。
实操建议:
- 先用
json.load(f)手动加载,检查顶层结构:type(data)是list还是dict;如果是dict,得先提取真实数据字段,例如data["items"]或data.get("results") - 对嵌套字段(如
"address": {"city": "Beijing", "zip": "100000"}),别硬塞进read_json(),改用pandas.json_normalize()展开 - 遇到空值或
null,pandas 默认转成NaN,但 Excel 里可能显示为空白或#N/A,导出前可用df.fillna("")统一处理
to_excel() 必须指定 engine 且注意路径权限
默认不带 openpyxl 或 xlsxwriter 时,to_excel() 会报 ValueError: No engine specified。pandas 不自带 Excel 写入引擎,必须显式安装并指定。
实操建议:
- 运行
pip install openpyxl(推荐,支持 .xlsx 且能写样式)或pip install xlsxwriter(轻量,但不支持读) - 调用时明确传参:
df.to_excel("output.xlsx", index=False, engine="openpyxl");漏掉engine参数在新版本 pandas 中会直接失败 - Windows 下路径含中文或空格通常没问题,但 Linux/macOS 若提示
PermissionError,先确认目标目录可写,或换绝对路径测试
时间字段和数字精度容易被 Excel 自动“美化”
pandas 里的 datetime64 列写入 Excel 后,常变成一串数字(Excel 底层序列号),而浮点数如 3.1415926 可能被截断为 3.14159——这不是 pandas 的问题,是 Excel 打开时的默认渲染行为。
实操建议:
- 时间列导出前转字符串:
df["created_at"] = df["created_at"].dt.strftime("%Y-%m-%d %H:%M:%S"),避免格式错乱 - 高精度数字列(如金额、ID),导出前确保是
str类型:df["order_id"] = df["order_id"].astype(str),防止科学计数法或截断 - 若需保留 Excel 原生时间格式或单元格样式,得用
openpyxl手动操作工作簿,to_excel()本身不提供格式控制
最麻烦的永远不是“怎么写”,而是 JSON 源头是否可信:字段名大小写混用、null/None/"" 混存、数组长度不一致……这些不会报错,但会让 Excel 表格出现大量空列或错位。动手前花 30 秒看一眼原始 JSON 样本,比写十行代码都管用。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











