2016-07-27 11 views
1

Ich habe folgenden Code auf Werte in meinem json zu fusionieren:Verschmelzung json mit Python

from jsonmerge import merge 

with open('env.json') as data_file: 
    data = json.load(data_file) 
    result2 = merge("", data.get('default_attributes')) 
    result3 = merge(result2, data.get('normal_attributes')) 
    result4 = merge(result3, data.get('override_attributes')) 
    result5 = merge(result4, data.get('force_override_attributes')) 
    > print result4, result5 
    result6 = merge(result5, data.get('automatic_attributes')) 
    cookbook_versions = {"cookbook_versions" : data.get('cookbook_versions')} 
    result7 = merge(result6, cookbook_versions) 

Wenn ich jetzt result4 drucken, result5 ich:

result4 = {u'modmon ': { u'env ': u'dev'}, u'default ': {u'env': u'developmen-jq '}, u'paypal': {u'artifact ': u'% 5BINTEGRATION% 5D '} , u'windows ': {u'password': u'Pib1SheK1N5 '}, u'task_sched': {u'credentials ': u'kX? RLQ4XN $ q'}, u'seven_zip ': {u'url ': u' https://.io/artifactory/djcm-zip-local/djcm/chef/paypal/7z1514-x64.msi '}, u'7-zip': {u'home ': u' % SYSTEM% \ 7-zip '}}

result5 = None

welche sinnvoll nicht zu ich als Ergebnis5 füge ich Ergebnis 4 zusammen, das bereits Inhalt hat, warum kommt es dann heraus Null?

+0

Ich hoffe, dass dies ein Fake Passwort ist ... – ffarquet

+0

yup es entfernt und ist gefälscht. : D – Scooby

Antwort

2

Wenn data.get('force_override_attributes') ist None dann merge(result4, data.get('force_override_attributes')) ist None

>>> a = {"a":10} 
>>> b = merge(a, None) 
>>> print b 
    None 

Was können Sie tun, ist:

result5 = merge(result4, data.get('force_override_attributes') or {}) 

Also selbst wenn es sich um ein None ist der Wert von result4 beibehalten wird.

oder eine andere Option ist die Reihenfolge umgekehrt, sollte dies auch funktionieren:

result5 = merge(data.get('force_override_attributes'), result4) 
+0

warum ist das? Shount Merge die beiden Werte verschmelzen und nicht gemeinsame Werte nicht überschreiben? irgendwelche Doc-Links, um dies zu unterstützen? – Scooby

+0

danke, das funktioniert. – Scooby