如何指定Python请求API返回JSON的包含字段?
如何从API响应中仅提取所需的公司名称和官网地址?
问题背景
我用Python的requests库调用API获取创业公司数据,原代码会提取并保存所有返回的JSON数据,包含大量冗余信息。我只需要其中的公司名称(如iconicchain)和官网地址(如https://www.iconicchain.com),该怎么修改代码来实现?
原代码如下:
import json import requests resp = requests.get('https://api.oxoservices.eu/api/v1/startups?site=labs&startup_status=funded') json_resp = json.loads(resp.text) for company in json_resp['data']: print(json.dumps(company, indent=4)) print() with open("test.json", "w", encoding='utf-8') as file: # file.write(str(json_resp)) json.dump(json_resp, file, indent=4, sort_keys=True)
API返回的JSON核心结构示例:
"data": [ { "name": "iconicchain", "website": "https://www.iconicchain.com", // 其他冗余字段... } ]
解决方案
通过遍历响应数据,仅提取目标字段并收集为新的数据结构,再统一写入文件即可。修改后的代码如下:
import json import requests # 发起API请求 resp = requests.get('https://api.oxoservices.eu/api/v1/startups?site=labs&startup_status=funded') # 直接解析JSON响应,替代json.loads(resp.text)更简洁 json_resp = resp.json() # 初始化列表存储过滤后的数据 filtered_companies = [] for company in json_resp['data']: # 仅提取需要的name和website字段,可自定义键名 filtered_company = { "company_name": company["name"], "official_website": company["website"] } filtered_companies.append(filtered_company) # 打印单个公司的目标信息 print(json.dumps(filtered_company, indent=4)) print() # 将过滤后的数据写入文件,避免循环内重复写入导致数据覆盖 with open("filtered_companies.json", "w", encoding='utf-8') as file: json.dump(filtered_companies, file, indent=4, ensure_ascii=False)
关键改动说明
- 使用
resp.json()直接解析API响应,代码更简洁高效; - 创建
filtered_companies列表统一收集目标数据,解决原代码循环内反复写入文件导致数据被覆盖的问题; - 遍历每个公司对象时,仅保留
name和website字段,生成新字典剔除冗余信息; - 写入文件时添加
ensure_ascii=False,确保非ASCII字符(如中文)能正确保存和显示。
内容的提问来源于stack exchange,提问作者Berci Vagyok
相关产品推荐
相关产品推荐

