Python 解析Json数据
如何根据标记获取主机名?我正在尝试使用Python 解析Json数据,python,json,python-2.7,parsing,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 ta
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",
}
]
但它失败了,因为“tags”是一个未映射到主机名密钥的列表。是否有任何方法可以根据“tags”获取主机名?要将所有主机名标记为默认主机名,请使用: 如果您只想要第一次点击,请使用
def_主机名[0]
或同等版本:
当前代码失败,因为它使用了名为
default
的变量default
。您需要查找字符串默认值。要将所有主机名标记为默认值,请使用:
如果您只想要第一次点击,请使用def_主机名[0]
或同等版本:
当前代码失败,因为它使用了名为
default
的变量default
。您需要查找字符串默认值。使用中的测试列表中是否有内容。您还需要在引号中加上default
,使其成为字符串
print('first: %s' % next(i['hostname'] for i in a if 'default' in i['tags']))
如果您只需要找到一个匹配项,那么您应该在找到它后立即跳出循环
如果您需要找到多个匹配项,请在列表理解中使用@phihag的答案。使用中的测试列表中是否有内容。您还需要在引号中加上default
,使其成为字符串
print('first: %s' % next(i['hostname'] for i in a if 'default' in i['tags']))
如果您只需要找到一个匹配项,那么您应该在找到它后立即跳出循环
如果需要查找多个匹配项,请使用@phihag的答案和列表理解。确保所有内容都是Json格式的,如
a=[{
“数据”:{
“检查”:正确,
},
“AMI”:{
“地位”:1,
“防火墙”:{
“状态”:“启用”
},
“d_后缀”:“x.y.com”,
“id”:4
},
“标签”:[
“默认值”
],
“主机名”:“abc.com”,
}
]
确保所有内容都是Json格式的,比如
a=[{
“数据”:{
“检查”:正确,
},
“AMI”:{
“地位”:1,
“防火墙”:{
“状态”:“启用”
},
“d_后缀”:“x.y.com”,
“id”:4
},
“标签”:[
“默认值”
],
“主机名”:“abc.com”,
}
]
我添加了更多信息并修复了“默认”字符串。问题是我只想要一个与“默认”标记关联的主机名。@techno我已经用只得到第一次命中的等效生成器表达式修改了答案。我添加了更多信息并修复了“默认”字符串。问题是我只想要一个与“默认”标记关联的主机名“default”标记。@techno我已经用等效的生成器表达式修改了答案,该表达式只得到了第一次命中。我之前尝试过这个方法,但它可以找到带有默认标记的标记,但它不会返回与“default”标记关联的主机名,而是返回dic中的第一个“hostname”值。我之前尝试过这个方法,但事情是这样的,它可以找到带有默认值的标记,但不是返回与“默认”标记关联的主机名,而是返回与“标记”关联的“主机名”值:[“默认”,“自动”]如果标记是[“默认”,“自动”]
,那么它是默认值,不是吗?只有当default
是唯一的标记时,才需要匹配它?如果len(i['tags'])==1和i['tags'][0]可以使用=='default':
我之前尝试过这件事,但事情是这样的:它可以找到带有默认值的标记,但不是返回与'default'标记关联的主机名,而是返回dic中的第一个'hostname'值。我之前尝试过这件事,但它可以找到带有默认值的标记,而不是返回关联的主机名使用“default”标记返回与“tags”关联的“hostname”值:[“default”,“auto”]如果标记是[“default”,“auto”]
,那么它就是默认值,不是吗?只有当default
是唯一的标记时,您才想匹配它?如果len(i['tags'])=1和i['tags'][0]='default',您可以使用
print('first: %s' % next(i['hostname'] for i in a if 'default' in i['tags']))
for i in a:
if 'default' in i['tags']:
output = i['hostname']
break