如何使用动态键名在Python中解析json?
我试图从下面的JSON中提取如何使用动态键名在Python中解析json?,python,json,Python,Json,我试图从下面的JSON中提取name。我遇到的问题是JSON中的主机名是动态的,所以如果有意义的话,我不知道如何在该层下挖掘。因此,“ip-10-12-68-170.b2c.test.com”对于每个json块都有不同的ip { "host" : { "ip-10-12-68-170.b2c.test.com" : { "environment" : { "testing1" : {
name
。我遇到的问题是JSON中的主机名是动态的,所以如果有意义的话,我不知道如何在该层下挖掘。因此,“ip-10-12-68-170.b2c.test.com”对于每个json块都有不同的ip
{
"host" : {
"ip-10-12-68-170.b2c.test.com" : {
"environment" : {
"testing1" : {
"ip" : "ip-10-12-68-170",
"name" : "testing",
"env.root" : "/",
"host" : "ip-10-12-68-170.b2c.test.com",
"sin" : "sin.80",
"env.description" : "Content Author Preview"
}
}
},
"ip-10-12-108.27.b2c.test.com" : {
"environment" : {
"esbqav" : {
"ip" : "ip-10-12-108.27",
"name" : "espv",
"env.root" : "/",
"host" : "ip-10-12-108.27.b2c.test.com",
"sin" : "sin.0",
"env.description" : "QA"
}
}
}
}
}
如何从本例中获取
名称?您可以通过调用dict
的.items()
成员对其进行迭代。这样,你不需要事先知道钥匙是什么
json= {
"host" : {
"ip-10-12-68-170.b2c.test.com" : {
"environment" : {
"testing1" : {
"ip" : "ip-10-12-68-170",
"name" : "testing",
"env.root" : "/",
"host" : "ip-10-12-68-170.b2c.test.com",
"sin" : "sin.80",
"env.description" : "Content Author Preview"
}
}
},
"ip-10-12-108.27.b2c.test.com" : {
"environment" : {
"esbqav" : {
"ip" : "ip-10-12-108.27",
"name" : "espv",
"env.root" : "/",
"host" : "ip-10-12-108.27.b2c.test.com",
"sin" : "sin.0",
"env.description" : "QA"
}
}
}
}
}
for ip, ip_dict in json['host'].items():
for hostname, hostname_dict in ip_dict['environment'].items():
name = hostname_dict['name']
print (ip, hostname, name)
以下代码是等效的,但仅迭代键,而不是键、值对:
for ip in json['host']:
for hostname in json['host'][ip]['environment']:
name = json['host'][ip]['environment'][hostname]['name']
print (ip, hostname, name)
可以使用dictionaryvalues()
或items()
方法,前提是结构如示例所示
import json
json_string = """
{
"host" : {
"ip-10-12-68-170.b2c.test.com" : {
"environment" : {
"testing1" : {
"ip" : "ip-10-12-68-170",
"name" : "testing",
"env.root" : "/",
"host" : "ip-10-12-68-170.b2c.test.com",
"sin" : "sin.80",
"env.description" : "Content Author Preview"
}
}
},
"ip-10-12-108.27.b2c.test.com" : {
"environment" : {
"esbqav" : {
"ip" : "ip-10-12-108.27",
"name" : "espv",
"env.root" : "/",
"host" : "ip-10-12-108.27.b2c.test.com",
"sin" : "sin.0",
"env.description" : "QA"
}
}
}
}
}
"""
json_data = json.loads(json_string)
for host in json_data.values():
for hostname in host.values():
environment = hostname.get('environment')
for env in environment.values():
name = env.get('name')
print name
需要明确的是,您问题中的代码示例是JSON字符串还是Python程序片段?