如何用Python无for循环将嵌套JSON列表转为结构化CSV
解决方案:无循环实现嵌套JSON转指定格式CSV
核心思路
利用pandas.json_normalize的record_path和meta参数精准展开嵌套结构,再通过列重排保证与目标CSV格式一致,全程无需for循环。
代码实现(以典型嵌套JSON为例)
假设源JSON结构如下(匹配你提供的示例结构):
[ { "id": 1, "name": "Alice", "orders": [ {"order_id": 101, "product": "Laptop", "price": 999}, {"order_id": 102, "product": "Phone", "price": 699} ] }, { "id": 2, "name": "Bob", "orders": [ {"order_id": 201, "product": "Tablet", "price": 299} ] } ]
步骤1:加载数据并展开嵌套结构
import pandas as pd import json # 读取源JSON文件 with open("source.json", "r") as f: raw_data = json.load(f) # 使用json_normalize展开嵌套列表,保留上层元数据 df = pd.json_normalize( raw_data, record_path="orders", # 指定需要展开的嵌套列表字段 meta=["id", "name"] # 指定需要保留的上层字段 )
步骤2:对齐目标CSV列顺序
根据你提供的目标CSV列顺序,重新排列DataFrame的列:
# 替换为你的目标CSV列顺序 target_column_order = ["id", "name", "order_id", "product", "price"] df = df[target_column_order]
步骤3:导出为CSV
df.to_csv("target.csv", index=False)
针对深层嵌套的扩展
如果JSON存在多层嵌套(如orders下还有items子列表),只需将record_path设为路径列表即可:
df = pd.json_normalize( raw_data, record_path=["orders", "items"], # 多层嵌套的路径 meta=["id", "name", ["orders", "order_id"]] # 上层字段也可指定深层路径 )
关键注意事项
- 必须明确指定
record_path:若省略该参数,json_normalize只会展开第一层JSON,嵌套列表会保留为列中的列表对象,无法达到展开效果。 - 列顺序控制:
meta参数的顺序不影响最终列顺序,需通过最后一步的列重排严格对齐目标格式。 - 空值处理:嵌套字段缺失时,
json_normalize会自动填充NaN,不影响导出CSV的结构。
内容的提问来源于stack exchange,提问作者Chris X
相关产品推荐
相关产品推荐

