2017-06-08 5 views
1

Ich möchte meine JSON-Datei durchlaufen und zwei Werte zu einer Liste hinzufügen.Hinzufügen von JSON-Werten zu einer Liste

In der Theorie möchte ich eine verschachtelte Liste haben als: ips = [["custom3","modemId"],["custom3","modemId"]] und so weiter. Meine JSON-Datei enthält 171 von jedem custom3- und modemId-Wert. Also wird meine verschachtelte Liste theoretisch 171 Listen enthalten.

Ich habe Probleme beim Hinzufügen der Werte in eine Liste, in der ich jede Liste zusammenfügen möchte, um 171 Listen zu erstellen.

json1 = open('C:\\Users\\' + comp_name + '\\Documents\\Programming Projects\\Python\\Python Firmware Script\\curl\\src\\out.json') 
json1_obj = json.load(json1) 

for i in json1_obj['data']: 
    ip = [i['custom3']['modemId']] 

Ein Ausschnitt meiner JSON-Daten:

{ 
    "data": [ 
     { 
      "custom3": "192.168.243.132", 
      "modemId": "000408" 
     }, 
     { 
      "custom3": "192.168.244.156", 
      "modemId": "000310" 
     } 
    ] 
} 

Ich habe wie oben 171 Objekte, aber ich zeige nur zwei. Aus dem obigen möchte ich zwei Listen erstellen und sie jeweils in eine verschachtelte Liste anfügen.

Wie kann ich jedes JSON-Objekt durchlaufen und eine verschachtelte Liste mit meinen JSON-Daten in Python erstellen?

+0

Array innerhalb eines Array oder ein Array von Dicts? – Zeokav

+0

Nach dem Laden der JSON, es ist nur normale Python-Listen und Wörterbücher –

+0

@ cricket_007 Ich weiß nicht, wie ich durch meine JSON-Objekte durchlaufen und zwei Werte in eine Liste hinzufügen. Mit dem obigen Code bekomme ich den folgenden Fehler: "String-Indizes müssen ganze Zahlen sein" – juiceb0xk

Antwort

2

Wie in den Kommentaren erwähnt, ist das Json einmal geladen ein Python-Wörterbuch. Sie sollten jetzt den Wert des Schlüssels 'data' iterieren, die Informationen extrahieren und in einer Liste speichern.

So etwas sollte die Arbeit machen:

json_obj = json.load(json1) 

ips = [] 
for piece in json_obj['data']: 
    this_ip = [piece['custom3'], piece['modemId']] 
    ips.append(this_ip) 

Eine Zeile Form:

ips = [[piece['custom3'], piece['modemId']] for piece in json_obj['data']] 
+0

Das hat funktioniert! Vielen Dank. Sehr interessant, in der Tat, ich habe nur daran gedacht, die beiden Werte in eine Liste aufzunehmen. – juiceb0xk

+0

Sie könnten das gleiche in einer Zeile;) –

+0

Sehr hilfreich, vielen Dank. – juiceb0xk

1

Wenn Sie sich nur wünschen

ips = [["custom3","modemId"],["custom3","modemId"]] 

Dann alles, was Sie brauchen, ist eine einfache Liste Verständnis

ips = [d.keys() for d in json1_obj['data']] 

Wenn Sie wirklich wollen, um die Werte zu erhalten (in dieser Reihenfolge), nicht die Schlüssel

ips = [ [ d['custom3'], d['modemId'] ] for d in json1_obj['data']] 
+0

Das ist praktisch, leider haben meine JSON-Objekte viel mehr Daten als das, was ich angegeben habe, tut mir leid! Beim Drucken meiner Liste wird jeder einzelne Wert gedruckt. Ich brauche nur zwei Werte von meinen JSON-Objekten. – juiceb0xk

+0

Ich nehme an, dass Sie eigentlich den Wert wollen, also habe ich –

+0

bearbeitet Vielen Dank in der Tat. – juiceb0xk

0

Wenn Sie die Werte von custom3 und modemIds möchten, können Sie dies tun,

[item.values() for item in json_data['data']] 
Verwandte Themen