Python JSON解析报错求助:处理URL读取的JSON值前缀判断问题
问题分析与解决办法
嘿,我一眼就瞅出你代码报错的原因啦!你拿到的data是个字典对象(就像你给的示例{ "Id": "1234", "something": "{...}" }),但你用for x in data循环的时候,x取到的其实是字典的键名(比如字符串"Id"、"something"),字符串哪有get()方法呀?这就是报错的核心问题~
针对单个JSON对象的正确写法
如果你的接口返回的就是单个这样的字典(不是列表),根本不需要循环,直接判断字段值就行:
import urllib import json response = urllib.urlopen(url) data = json.loads(response.read()) id_list = [] # 用get方法避免KeyError,默认空字符串防止报错 if data.get("something", "").startswith('{'): id_list.append(data["Id"])
针对多个JSON对象组成的列表的写法
如果你的实际场景是接口返回了一个包含多个这类对象的列表(比如[{"Id": "1234", ...}, {"Id": "5678", ...}]),那你要循环的是这个列表,而不是单个字典:
import urllib import json response = urllib.urlopen(url) # 这里data是列表类型 data = json.loads(response.read()) id_list = [] for item in data: # 同样用get做安全处理 if item.get("something", "").startswith('{'): id_list.append(item["Id"])
额外小提示
用data.get("something", "")而不是直接data["something"],是为了防止某个数据里没有"something"这个字段时,代码不会抛出KeyError异常,空字符串调用startswith('{')会返回False,逻辑更健壮~
内容的提问来源于stack exchange,提问作者ashkash
相关产品推荐
相关产品推荐

