You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:42:37