我正在从URL读取JSON,并且遇到了一些操纵数据的问题。
JSON如下:
{
"Id": "1234,
"something": "{..."
}
我从URL中读取了JSON,如下所示,效果很好。
response = urllib.urlopen(url)
data = json.loads(response.read())
现在我要做的是每当“某事”的值以“{”开头时,将“Id”附加到列表中。这就是我所拥有的:
for x in data:
if x.get("something").startswith('{'):
do something...
我收到以下错误:
if x.get("something").startswith('{'):
AttributeError:'NoneType'对象没有属性'startswith'
无论如何,我可以让这个工作,或其他建议如何完成这个?
答案 0 :(得分:0)
你走在正确的轨道上......
首先,您需要检查“某些内容”是否存在,否则您的代码将转为"None"
这就是您收到错误的原因,您可以尝试以下操作以确保出现这种情况:
for key, value in data.items():
if key == "something":
if value.startswith('{'):
# do something...
答案 1 :(得分:0)
我认为你只需要这部分:
if data.get("something").startswith("{"):
因为它是一个字典,你可以通过调用带有dict名称的键来获取dict值。无需循环。
当你循环它时,它会遍历键。如果你想以你的方式做到这一点,你可以这样做:
for x, y in data.items():
if x=="something" and y.startswith("{"):
do what you want...
答案 2 :(得分:0)
good_items = ["""something""" for k in data if k.startswith('{')]
而不是“”某事“”“,您可以将方法调用放入一个带有单个参数的函数(单个键)。这将从条件匹配的数据中生成项目列表。希望有所帮助...
答案 3 :(得分:0)
data
是一本字典,"某些东西"是字典中是否存在的关键字。以下代码检查密钥是否存在(然后它提取与代码关联的值,并检查值是否以" {")开头;与否(然后它用一个不以" {")开头的空字符串替换该值:
if data.get("something","").startswith("{"): ...
如果密钥肯定存在,解决方案甚至更简单:
if data["something"].startswith("{"): ...