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

如何将BI Query返回的嵌套JSON数据读取为Pandas DataFrame?

解决方案:提取results字段转换为DataFrame

你说得没错,这种带顶层元数据的嵌套JSON是API返回里的常见场景,pd.read_json(url)直接用确实会把整个顶层对象(包括count、next这些字段)当成DataFrame结构,完全不是我们要的结果。不用自己从头写复杂逻辑,用requests加Pandas就能轻松搞定,甚至还能顺手处理分页的情况。

基础版:单次请求转换

先通过requests获取API数据,解析后提取results数组,再传入pd.DataFrame()即可:

import requests
import pandas as pd

# 替换成你的BI Query服务实际URL
api_url = "https://your-bi-query-service.com/target-endpoint"

# 发送请求并解析JSON响应
response = requests.get(api_url)
response_data = response.json()

# 提取核心数据数组并转换为DataFrame
df = pd.DataFrame(response_data["results"])

运行后df就会生成包含name和surname列的表格,完全匹配你示例里的数据结构。

进阶版:自动处理分页数据

如果你的API支持分页(比如next字段返回下一页的请求URL),可以用循环自动拉取所有页的数据:

import requests
import pandas as pd

api_url = "https://your-bi-query-service.com/target-endpoint"
all_records = []

while api_url:
    response = requests.get(api_url)
    response_data = response.json()
    # 把当前页的结果追加到总列表
    all_records.extend(response_data["results"])
    # 更新请求URL为下一页地址,没有下一页时会变成None,自动终止循环
    api_url = response_data["next"]

# 把所有分页数据合并成一个DataFrame
df = pd.DataFrame(all_records)

为什么read_json(url)不行?

pd.read_json()默认会把整个JSON对象直接解析成DataFrame,你的示例数据顶层是包含count、next、previous、results的对象,所以直接用的话,results会变成一个单独的列,每个单元格是一个字典,这显然不是你要的行级数据结构。必须先提取results这个数组,再转换才能得到正确的表格。

内容的提问来源于stack exchange,提问作者Bartłomiej Bartnicki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:20