如何读取JSON文件中嵌套API链接并将返回数据填充至DataFrame
方案可行性说明
该需求完全可落地实现,不需要用do while循环遍历,基于Python的pandas+requests库就能高效完成,还可通过缓存机制避免重复请求相同API链接,大幅提升执行效率。
具体实现步骤
1. 依赖安装
执行命令安装所需工具库:
pip install pandas requests
2. 核心实现代码
这里直接给出可直接修改使用的示例代码,包含缓存、异常处理逻辑:
import pandas as pd import requests from functools import lru_cache import time # 配置:如果API需要身份验证,在此处添加请求头,比如对应ServiceNow接口的基本认证 HEADERS = { # "Authorization": "Basic 替换为你的认证字符串", "Accept": "application/json" } # 固定携带的请求参数 PARAMS = {"sysparm_display_value": "true"} # 加缓存装饰器,相同链接只会请求一次,避免重复调用浪费资源 @lru_cache(maxsize=None) def get_parent_display_value(api_link: str): try: # 如果接口有调用频率限制,可解开下行注释添加等待时间 # time.sleep(0.5) resp = requests.get(api_link, headers=HEADERS, params=PARAMS, timeout=10) resp.raise_for_status() result = resp.json()["result"] # 按需修改取值路径即可,当前逻辑是返回接口返回结果中u_parent对应的display_value return result.get("u_parent", {}).get("display_value", "") except Exception as e: print(f"请求链接{api_link}失败: {str(e)}") return "" # ---------------------- 主逻辑 ---------------------- # 1. 加载初始JSON数据到DataFrame,此处替换为你自己的JSON加载逻辑 initial_data = [ { "u_name": "******", "u_parent": { "display_value": "*****", "link": "https://*****.******.com/api/now/table/u_region_hierarchies/ed7f652f1b29341051380e93cc4bcbd7" }, "sys_id": "159967df1b75601070bfdb9cbc4bcb35", "sys_updated_by": "mlarcheveque", # 其余字段省略 } ] df = pd.DataFrame(initial_data) # 2. 提取u_parent的link字段,调用接口获取目标值,新增到df的新列 df["u_parent_correct_display"] = df["u_parent"].apply(lambda x: get_parent_display_value(x["link"]) if isinstance(x, dict) and x.get("link") else "") # 此时df已经包含你需要的正确父级display_value字段,可直接导出或后续处理 print(df.head())
3. 多层级父级遍历扩展
如果你需要递归获取所有层级的父级(比如当前父级还有上级父级,一直到顶层为止),只需要修改get_parent_display_value函数,增加递归判断逻辑即可。
注意事项
- 身份认证参数请根据你的API实际要求补充,避免请求被拦截
- 缓存机制可大幅降低API调用量,相同链接只会请求一次,适合存在大量重复父级链接的场景
内容的提问来源于stack exchange,提问作者Piccinin1992
相关产品推荐
相关产品推荐

