2017-10-31 2 views
-2

Ich versuche, meine JSON-Inhalte zu drucken. Ich weiß, wie man nur Tasten und Werte druckt, aber ich möchte auch Zugriff auf die Objekte innerhalb der Tasten haben. Dies ist mein Code:Überprüfen, ob der Wert eines Schlüssels in JSON einen anderen Schlüssel hat

json_mini = json.loads('{"one" : {"testing" : 39, "this": 17}, "two" : "2", "three" : "3"}') 
for index, value in json_mini.items(): 
    print index, value 
    if value.items(): 
     for ind2, val2 in value.items(): 
      print ind2, val2 

die mir diesen Fehler gibt: AttributeError: 'unicode' object has no attribute 'items'

Wie über sie iterieren? Also kann ich einen Prozess für jeden einzelnen Schlüssel und Wert durchführen?

+1

Sie könnten 'überprüfen, ob isinstance (Wert, dict)'. Was soll 'value.items()' zurückgeben, wenn 'value'' '2" 'ist? – khelwood

+1

Sie benötigen eine rekursive Funktion, weil Ihre JSON Multilevel ist –

+0

@AleksandrBorisov können Sie die Lösung für Python 2.7 bieten? – soommy12

Antwort

2

rekursive Beispiel:

import json 


def func(data): 
    for index, value in data.items(): 
     print index, value 
     if isinstance(value, dict): 
      func(value) 


json_mini = json.loads('{"one" : {"testing" : 39, "this": 17}, "two" : "2", "three" : "3"}') 
func(json_mini) 
+0

Vielen Dank, ich hoffe, Ihre Antwort wird jemand anderen auch helfen, weil im Stapel Überlauf gibt es nur eine Lösung für Python 3 – soommy12

1

Hier ist eine rekursive Art und Weise, die in Python 2 und 3 arbeitet, die nicht isinstance() nicht verwendet. Es verwendet stattdessen Ausnahmen, um zu bestimmen, ob ein bestimmtes Element ein Unterobjekt ist oder nicht.

import json 

def func(obj, name=''): 
    try: 
     for key, value in obj.items(): 
      func(value, key) 
    except AttributeError: 
     print('{}: {}'.format(name, obj)) 

json_mini = json.loads('''{ 
           "three": "3", 
           "two": "2", 
           "one": { 
            "this": 17, 
            "testing": 39 
           } 
          }''') 

func(json_mini) 

Ausgang:

this: 17 
testing: 39 
three: 3 
two: 2 
Verwandte Themen