Python中按索引提取JSON数据的方法及报错解决方案
报错原因
你写的[0,9]语法在Python中会被自动识别为元组(0,9),而json['data']是列表类型,仅支持整数或切片作为索引,因此触发类型错误。
另外data数组中的每个元素是字典结构,即使你想按字段顺序取值,也不能直接对字典用数字索引访问,Python字典不支持这种写法。
正确访问方案
推荐方案(按字段名访问,稳定性最高)
接口返回的字段顺序可能出现变动,直接用字段名取值不会受顺序影响,是兼容性最好的写法:
url = 'my_url' access_token = 'my_token' result = requests.get(url,headers={'Content-Type':'application/json','Authorization': 'Bearer {}'.format(access_token)}) json_data = result.json() # 注意不要用json作为变量名,会和内置json模块冲突 # 先取data列表的第一个元素,再直接取name字段的值 company = json_data['data'][0]['name'] print(company)
注意:不要用
json作为变量名,会覆盖Python内置的json模块,后续如果要调用json模块的方法会报错。
特殊场景方案(按字段位置索引访问)
如果你的场景必须按字段的排序位置取值,可以先将字典的键转为列表,再按索引取对应字段名后取值:
first_item = json_data['data'][0] # 先拿到按顺序排列的所有字段名列表,取索引为9的字段名,再用字段名取值 name = first_item[list(first_item.keys())[9]]
通用提取逻辑
- 第一步:通过
json_data['data']获取所有实例组成的列表 - 第二步:用
[索引值]取列表中对应位置的单条实例,索引从0开始计数,比如[0]是第一条,[1]是第二条 - 第三步:提取单条实例的指定信息:
- 常规场景:直接用
['字段名']访问对应值,无需关注字段顺序,稳定性最高 - 需按索引取值的场景:先通过
list(实例.keys())拿到按顺序排列的字段名列表,取对应索引的字段名后,再用字段名访问对应值
- 常规场景:直接用
内容的提问来源于stack exchange,提问作者VRapport
相关产品推荐
相关产品推荐

