2017-04-17 2 views
2

ich derzeit eine JSON-Datei habe, die so aussieht ....Python Parsing mehr JSON-Objekte in ein Objekt

{ 
    "data": [ 
    { 
     "tag": "cashandequivalents", 
     "value": 10027000000.0 
    }, 
    { 
     "tag": "shortterminvestments", 
     "value": 101000000.0 
    }, 
    { 
     "tag": "accountsreceivable", 
     "value": 4635000000.0 
    }, 
    { 
     "tag": "netinventory", 
     "value": 1386000000.0 
    }... 

aber was ich versuche, dies

{ 
    "cashandequivalents": 10027000000.0, 
    "shortterminvestments":101000000.0 , 
    "accountsreceivable":4635000000.0, 
    "netinventory":1386000000.0 
} 

mich zu bekommen Ich weiß einfach nicht, wie ich das anstellen soll.


Vielleicht gibt es einen einfacheren Weg, aber dies scheint die logischste für mich, weil der nächste Schritt writer.writerow ist also

nach CSV schließlich die csv wie

cashandequivalents | shortterminvestments | accountsreceivable | netinventory 
100027000000   101000000000   46350000000   13860000000 
###########   ############   ###########   ........... 

(writer.writeheader aussehen wird außerhalb der Schleife gemacht, also schreibe ich nur die Werte, nicht die "Markierungen")

Danke

+1

'combined = {Element ['Tag']: Element ['Wert'] für Element in einem ['Daten']}' wo 'a' Ihre ursprüngliche Struktur ist. Das ist ein Wörterbuchverständnis. – roganjosh

Antwort

3

Eine naive Lösung:

import json 

json_data = { 
    "data": [ 
     { 
      "tag": "cashandequivalents", 
      "value": 10027000000.0 
     }, 
     { 
      "tag": "shortterminvestments", 
      "value": 101000000.0 
     }, 
     { 
      "tag": "accountsreceivable", 
      "value": 4635000000.0 
     }, 
     { 
      "tag": "netinventory", 
      "value": 1386000000.0 
     } 
    ] 
} 

result = dict() 
for entry in json_data['data']: 
    result[entry['tag']] = entry['value'] 

print json.dumps(result, indent=4) 

Ausgabe

{ 
    "shortterminvestments": 101000000.0, 
    "netinventory": 1386000000.0, 
    "accountsreceivable": 4635000000.0, 
    "cashandequivalents": 10027000000.0 
} 
1

Die einfachste und sauberste Weg, dies zu tun, ist mit einem Wörterbuch Verständnis.

d = { 
"data": [ 
    { 
    "tag": "cashandequivalents", 
    "value": 10027000000.0 
    }, 
    { 
    "tag": "shortterminvestments", 
    "value": 101000000.0 
    }, 
    { 
    "tag": "accountsreceivable", 
    "value": 4635000000.0 
    }, 
    { 
    "tag": "netinventory", 
    "value": 1386000000.0 
    } 
] 
} 
newDict = {i['tag']: i['value'] for i in d['data']} 

# {'netinventory': 1386000000.0, 'shortterminvestments': 101000000.0, 'accountsreceivable': 4635000000.0, 'cashandequivalents': 10027000000.0} 

This iteriert durch die list, die innerhalb des "data" Schlüssel Ihrer ursprünglichen dictionary und erstellt eine neue Linie mit dem Schlüssel ist, um die tag Wert jedes und der Wert ist, um die value für jede enthalten ist während die Iterationen.