2016-06-30 5 views
2

Ich habe ein Json wie unten:Python extrahiert alle Schlüsselwerte in in verschachtelter JSON in einer Liste

{"widget": { 
    "debug": "on", 
    "window": { 
     "title": "SampleWidget", 
     "name": "main_window", 
     "width": 500, 
     "height": 500 
    }, 
    "image": { 
     "src": "Images/Sun.png", 
     "name": "sun1", 
     "hOffset": 250, 
     "vOffset": 250, 
     "alignment": "center" 
    }, 
    "text": { 
     "data": "Click Here", 
     "size": 36, 
     "style": "bold", 
     "name": "text1", 
     "hOffset": 250, 
     "vOffset": 100, 
     "alignment": "center", 
     "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
    } 
}} 

Ich brauche alle Schlüsselwertpaar extrahiert haben. z.B. debug=on,title=SampleWidget,name=main_window und so weiter. Wie kann ich das generisch machen? Ich meine, der JSON kann ein anderer als der im Beispiel sein, aber die Prozedur sollte gleich sein.

+0

Haben Sie ein Wörterbuch aller Paare müssen, wenn der Wert selbst kein Wörterbuch ist? Kollabiertes Wörterbuch? Das wäre kein Problem? Sie haben drei 'Name' Tasten – Neo

+0

Sie finden Ihre Antwort hier: http://stackoverflow.com/questions/10756427/loop-through-all-nested-dictionary-values ​​oder hier: http://stackoverflow.com/questions/3229419/pretty-printing-nested-dictionaries-in-python –

Antwort

3
data = {"widget": { "debug": "on", "window": { "title": "SampleWidget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" } }} 

def pairs(d): 
    for k, v in d.items(): 
     if isinstance(v, dict): 
      yield from pairs(v) 
     else: 
      yield '{}={}'.format(k, v) 

print(list(pairs(data))) 
$ python3.5 extract.py 
['size=36', 'alignment=center', 'data=Click Here', 'onMouseUp=sun1.opacity = (sun1.opacity/100) * 90;', 'vOffset=100', 'name=text1', 'hOffset=250', 'style=bold', 'name=sun1', 'hOffset=250', 'vOffset=250', 'alignment=center', 'src=Images/Sun.png', 'debug=on', 'name=main_window', 'title=SampleWidget', 'width=500', 'height=500'] 
Verwandte Themen