2017-07-05 5 views
0

Ich brauche Hilfe bei der Aktualisierung eines Json - Wörterbuch Wertes mit variablen Schlüsseln.Wie kann ich ein Json-Wörterbuch auf verschiedenen Ebenen aktualisieren?

Hier ist, was ich weiß funktioniert und das Problem, das ich habe.

Sagen wir, ich dies tun:

print(my_json['convergedSystem']['endpoints'][0]['credentials'][0]['credentialElements']['username']) 

ich Mike Jetzt zurück, wenn ich dies tun:

my_json['convergedSystem']['endpoints'][0]['credentials'][0]['credentialElements']['username'] = ‘Carol’ 

Und das gleiche Druck tun:

print(my_json['convergedSystem']['endpoints'][0]['credentials'][0]['credentialElements']['username']) 

ich zurück Carol

So würde ich erwarten, dass es funktioniert. Problem ist, dass ich nicht immer weiß, was die obigen Indexschlüssel sind oder wie viele ... Ich kann jedoch eine Liste von ihnen bekommen. Manchmal brauche ich kann

my_json['convergedSystem']['endpoints'][0]['credentials'][0]['credentialElements']['username'] 

Andere Zeiten aktualisieren

my_json['convergedSystem']['credentials'][0]['credentialElements']['username'] 

auf einer anderen Ebene sein könnte oder sogar

my_json['FullSystem'][switches]['endpoints'][2]['credentials'][0]['credentialElements']['username'] 

Wie kann ich einstellen, dass im Code? Wieder werde ich immer eine Liste zur Verfügung zu mir wie folgt aus:

['convergedSystem', 'endpoints', 0, 'credentials', 0, 'credentialElements', 'username'] 

oder was auch immer es passiert in diesem Moment zu sein. Ich weiß, ich werde immer für [ ‚credentialElements‘] suchen [ ‚username‘] an einem gewissen Punkt jedoch

+0

Wahrscheinlich benötigen Sie eine rekursive Funktion, die das Wörterbuch durchquert. Das wäre der praktikabelste Ansatz, wenn Sie eine Liste mit Schlüsseln haben, aber keine Ahnung, wo oder in welcher Ebene sie sind. – DeepSpace

+0

Bitte verzeihen Sie, ich bin ein bisschen wie ein Hack, wenn es um Python geht. Ich bin in der Lage, durch das Verzeichnis zu gehen, das ist, wie ich jede Instanz von 'credentialElements' auf jeder Ebene finde, und wie ich die Liste der einzelnen Ebenen bekomme. Ich weiß einfach nicht, wie man diesen Level verwendet, um den Wert an diesem Punkt zu aktualisieren. –

Antwort

0

Ihre json Name ist my_json Unter der Annahme, und sagen, dass Ihre Liste als Schlüssel genannt wird und Sie aktualisieren möchten der Wert auf your_updated_value:

val = my_json # val contains reference to your json 
for key in keys[0:-1]: # iterate till the second last level 
    val = val[key] 
val[keys[-1]] = your_updated_value # update the value 

Beachten sie, dass seit val die Referenz von my_json, hat es wird my_json zu aktualisieren.

+0

Vielen Dank, Abhinav Das bringt mir den Wert, den ich schon bekommen kann. Ich bin in der Lage, diesen Wert zurück zu ändern. Also my_json würde jetzt mit einem neuen Wert aktualisiert werden. –

+0

Zum Beispiel: my_json ['konvergenteSystem'] ['endpoints'] [0] ['credentials'] [0] ['credentialElements'] ['username'] = 'Carol' Aber ich brauche die Schlüsselliste zu Variable Längen sein. Wenn es nur Variablenwerte wären, könnte ich das tun, aber die Schlüssellänge ist anders. So etwas wie: my_json [my_key_list] = 'Carol' –

+0

gerade meine Antwort bearbeitet, überprüfen Sie bitte, ob es funktioniert –

Verwandte Themen