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

