Python如何从接口返回的JSON数组中提取指定键值对
问题根源
你的代码有两处错误直接导致报错:
- 未对接口返回的JSON做解析:
response.text得到的是原始JSON格式字符串,不是Python可直接按键索引的字典/列表对象。对字符串用[0]只会取到整个字符串的第一个字符{,后续再用字符串形式的key去索引字符,必然触发TypeError: string indices must be integers。 - 层级索引顺序错误:你要找的
Id字段存储在value键对应的单元素数组内,并非在最外层结构的第0位。哪怕你提前把JSON解析成了字典,直接对最外层字典用[0]索引也会报错——字典的键是@odata.context、value这类字符串,不存在数字0对应的键值。
修复方案
直接用requests库内置的json()方法自动解析响应为Python结构化对象,再按正确层级取值即可:
import requests response = requests.request("GET", url, headers=headers) # 自动解析JSON响应为Python字典 data = response.json() # 按层级取值:最外层字典 -> value键(得到数组)-> 数组第0位(单条记录字典)-> Id键 record_id = data['value'][0]['Id'] print(record_id)
运行后会输出你要的结果:02cb9c0f-89ca-46fd-882e-5d770d7da214
对应你给出的JSON结构,层级对应关系如下:
- 最外层是字典,包含
@odata.context、value两个键value对应的值是长度为1的数组,所有查询到的记录都存在这个数组里- 数组索引从0开始计数,因为你用唯一键查询只会返回1条结果,所以取
[0]就能拿到目标记录的字典,再从中提取Id即可
如果需要兼容偶发的空返回场景,避免索引越界报错,可以加一层简单判断:
data = response.json() record_list = data.get('value', []) if record_list: record_id = record_list[0]['Id'] print(record_id) else: print("未查询到匹配的记录")
内容的提问来源于stack exchange,提问作者Kevin Anderson
相关产品推荐
相关产品推荐

