Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析Json数据_Python_Json_Python 2.7_Parsing - Fatal编程技术网

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