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
相关产品推荐
相关产品推荐

