Python JSON解析,检查值是否以某些东西开头

时间:2018-03-27 04:36:28

标签: python

我正在从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'

无论如何,我可以让这个工作,或其他建议如何完成这个?

4 个答案:

答案 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("{"): ...