Python新手求助:无法从JSON输出中获取元素
嘿,作为Python新手碰到这种问题太正常啦,我来帮你捋捋思路!你提到把API返回内容转成JSON后,用filed['name']访问时触发了TypeError,大概率是你默认filed是字典类型,但实际它的结构和你想的不一样——可能是列表、嵌套层级不对,甚至是变量名写错了。
给你几个具体的排查和解决步骤:
先搞清楚JSON的真实结构
别着急直接访问键,先把转成JSON后的完整数据打印出来看看。比如在调用response.json()或者json.loads()之后,加一行代码:import json print(json.dumps(your_json_data, indent=4))格式化后的输出会清晰展示整个数据的层级,你能一眼看到
name字段到底在哪个位置,以及filed对应的是不是字典。排查最常见的坑:JSON最外层是列表
很多API返回的JSON最外层是列表(比如[{"name": "xxx"}, {"name": "yyy"}]),如果你直接把整个返回结果赋值给filed,那它就是列表类型,自然不能用字符串下标访问。这时候需要先取列表里的元素,比如filed[0]['name'](如果目标数据在第一个位置的话)。检查变量名和嵌套层级
有没有可能手滑打错了变量名?比如是不是field而不是filed?或者name藏在更深的嵌套里,比如filed['data']['details']['name']?打印完整结构后就能一目了然。补全报错信息更利于定位
你贴的报错只显示到TypeError: st...,完整的错误提示会告诉你具体原因——比如TypeError: list indices must be integers or slices, not str说明filed是列表;TypeError: 'NoneType' object is not subscriptable说明filed是None值。如果能拿到完整报错,定位问题会更快。
举个简单的示例,如果API返回的JSON结构是这样:
[ { "name": "FOA", "id": 1001 } ]
那你的代码可以调整成这样:
import requests import json def get_FOA(): # 调用API response = requests.get("你的API地址") # 转成JSON json_data = response.json() # 先打印确认结构 print(json.dumps(json_data, indent=4)) # 因为最外层是列表,先取第一个元素 filed = json_data[0] # 再访问name字段 print(filed['name']) get_FOA()
先按上面的步骤排查下JSON结构,应该就能找到问题所在啦~
内容的提问来源于stack exchange,提问作者Vignesh SP

