Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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 - Fatal编程技术网

如何使用动态键名在Python中解析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" : {

我试图从下面的JSON中提取
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)

可以使用dictionary
values()
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程序片段?