解析Json数据

时间:2017-03-30 22:46:59

标签: python json python-2.7 parsing

a=  [{
    "data" : {
        "check": true,
    },
    "AMI": {
        "status": 1,
        "firewall":{
            "status": enable  
        },
        "d_suffix": "x.y.com",
        "id": 4
    },
    "tags": [  #Sometime tags could be like "tags":  ["default","auto"]
        "default"
    ],
    "hostname": "abc.com",   
}
]

如何根据标签获取主机名?我正在尝试使用

实现它
for i in a:
  if i['tags'] == 'default':
     output = i['hostname']

但它失败了,因为'标签'是一个没有映射到主机名密钥的列表。有什么办法可以在'标签的基础上获得主机名?

3 个答案:

答案 0 :(得分:1)

要将所有主机名标记为默认主机名,请使用list comprehension

def_hostnames = [i['hostname'] for i in a if 'default' in i['tags']]
print('Default hostnames: %s' % ','.join(def_hostnames))

如果您只想要第一次点击,请使用def_hostnames[0]或等效的generator expression

print('first: %s' % next(i['hostname'] for i in a if 'default' in i['tags']))

您当前的代码失败,因为它使用default,这是一个名为default的变量。您想要查找字符串默认值。

答案 1 :(得分:1)

使用in来测试列表中是否有内容。您还需要将default放在引号中以使其成为字符串。

for i in a:
    if 'default' in i['tags']:
        output = i['hostname']
        break

如果你只需要找到一个匹配项,一旦找到它就应该突破循环。

如果你需要找到多个匹配项,请使用@ phihag的答案和列表理解。

答案 2 :(得分:0)

确保您拥有Json格式的所有内容,例如

HttpClient

然后您可以使用a= [{ "data" : { "check": True, }, "AMI": { "status": 1, "firewall":{ "status": "enable" }, "d_suffix": "x.y.com", "id": 4 }, "tags": [ "default" ], "hostname": "abc.com", } ]

轻松获取它

in