2016-04-07 10 views
-1

Ich versuche, name aus dem folgenden JSON zu ziehen. Das Problem, das ich habe, ist der Host-Name in der JSON ist dynamisch, so dass ich nicht weiß, wie man unter dieser Ebene graben, wenn das Sinn macht. So hat "ip-10-12-68-170.b2c.test.com" eine andere IP für jeden Block von json.Wie durch JSON in Python mit dynamischen Schlüsseln zu analysieren?

{ 
    "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" 
       } 
      } 
     } 
    } 
} 

Wie nehme ich name von diesem Beispiel?

+0

klar zu sein, ist das Code-Beispiel in Ihrer Frage sollte einen JSON-String oder ein Python-Programmfragment sein? –

Antwort

0

Sie können über eine dict iterieren, indem Sie ihr .items() Mitglied aufrufen. Auf diese Weise müssen Sie nicht im Voraus wissen, was die Schlüssel sind.

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) 

Der folgende Code entspricht, aber iteriert über nur die Schlüssel und nicht den Schlüssel, Wert-Paare:

for ip in json['host']: 
    for hostname in json['host'][ip]['environment']: 
     name = json['host'][ip]['environment'][hostname]['name'] 
     print (ip, hostname, name) 
1

Es ist möglich, unter Verwendung Wörterbuch values() oder items() Methoden gegeben, dass die Struktur als im Beispiel.

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