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

Python嵌套JSON标准化问题:分页API数据转Pandas DataFrame

嵌套JSON转Pandas DataFrame解决方案

1. 先明确API返回的嵌套结构

先确认你的分页API返回格式,常见结构类似这样:

{
  "page": 1,
  "total_pages": 3,
  "data": [
    {
      "id": 101,
      "user_name": "张三",
      "profile": {
        "age": 28,
        "city": "北京"
      },
      "orders": [
        {"order_id": "OD001", "amount": 199},
        {"order_id": "OD002", "amount": 299}
      ]
    }
  ]
}

2. 修正数据处理逻辑

你已经实现了分页循环,接下来重点是合并数据列表+正确标准化嵌套JSON:

import pandas as pd
import requests

all_records = []
current_page = 1
total_pages = 1

# 循环拉取所有分页数据
while current_page <= total_pages:
    res = requests.get(f"你的API地址?page={current_page}")
    res_json = res.json()
    # 更新总页数(从API返回里取对应字段,比如total_pages/总页数)
    total_pages = res_json["total_pages"]
    # 把当前页的核心数据列表追加到总列表
    all_records.extend(res_json["data"])
    current_page += 1

# 标准化嵌套JSON,分两种情况:
# 情况1:只有单层嵌套对象(比如上面的profile)
df = pd.json_normalize(all_records, sep="_")
# 输出后profile下的字段会变成profile_age、profile_city

# 情况2:包含嵌套数组(比如上面的orders),需要展开数组同时保留上层字段
df = pd.json_normalize(
    all_records,
    record_path="orders",  # 指定要展开的嵌套数组路径
    meta=["id", "user_name"],  # 保留上层需要的字段
    sep="_"
)
# 输出后会把每个order作为一行,同时带上id和user_name

# 导出成PowerBI易读取的格式
df.to_csv("api_output.csv", index=False, encoding="utf-8")
# 或者Excel格式
# df.to_excel("api_output.xlsx", index=False)

3. 常见问题排查

  • 标准化后字段缺失:检查你提取的data路径是否正确,有些API会把数据放在results/items字段下,不是data
  • 嵌套数组没展开:如果有多层嵌套数组,要确保record_path指向最内层的数组,同时用meta保留所有需要的上层标识字段
  • PowerBI导入乱码:导出CSV时指定encoding="utf-8-sig",解决中文乱码问题

内容的提问来源于stack exchange,提问作者BI Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:45:38