如何通过requests.get仅获取API返回JSON的指定字段?
问题:API请求时如何直接获取指定字段?
示例数据集
{ "id": 1, "name": "meow", "address": "123 meowmeow St, city, state 12345", "users": [ { "id": 1, "initials": "L.L", "checkIn": [] } ] }
当前调用API的代码
import requests import json url_API = "https://blah.com/organizations/api-key/organizations?apiKey=blahblah" response_API = requests.get(url_API) data = response_API.text parse_json = json.loads(data) yFile = json.dumps(parse_json, indent=4) print(yFile)
需求
希望直接通过请求仅获取指定字段,排除address字段以及users下的initials字段,最终只保留如下内容:
{ "id": 1, "name": "meow", "users": [ { "id": 1, "checkIn": [] } ] }
询问是否可行,还是必须先下载全部数据再筛选;参考过JSON:API相关示例,但不清楚如何构造requests.get的请求URL。
回答
能否直接通过请求获取指定字段,完全取决于目标API是否支持字段筛选功能,常见实现方式如下:
- 遵循JSON:API规范的字段筛选
如果该API符合JSON:API标准,可通过fields查询参数指定返回字段,嵌套资源用[资源名]声明子字段:
- 顶层字段:
fields[organizations]=id,name(假设资源类型为organizations) - 嵌套users字段:
fields[users]=id,checkIn
拼接后的请求URL示例:
https://blah.com/organizations/api-key/organizations?apiKey=blahblah&fields[organizations]=id,name&fields[users]=id,checkIn
- 自定义API筛选参数
部分API会采用自有规则,比如用exclude排除不需要的字段,或select指定需要的字段:
- 排除字段示例:
?exclude=address,users.initials - 指定字段示例:
?select=id,name,users.id,users.checkIn
这类规则没有统一标准,必须查看目标API的官方文档确认支持的参数。
如果API不支持任何字段筛选功能,就只能先下载全量数据,再在本地处理筛选:
import requests import json url_API = "https://blah.com/organizations/api-key/organizations?apiKey=blahblah" response_API = requests.get(url_API) parse_json = response_API.json() # 删除顶层不需要的字段 del parse_json["address"] # 删除users下不需要的字段 for user in parse_json["users"]: del user["initials"] print(json.dumps(parse_json, indent=4))
内容的提问来源于stack exchange,提问作者LUCY LE
相关产品推荐
相关产品推荐

