2016-12-02 4 views
0

Ich habe eine Eingabedatei, die eine Sequenz (nicht unbedingt eine Liste/Tupel usw.) von JSON-Elementen enthält.JSON-Daten in Python lesen

Dies sind die Beispieldaten:

{ 
      "candidate":[ 
       { 
        "id":"25624", 
        "name":"Clinton", 
        "affiliation":"Democrat", 
        "color":"", 
        "value":"46.8", 
        "status":"1" 
       }, 
       { 
        "id":"25623", 
        "name":"Trump", 
        "affiliation":"Republican", 
        "color":"", 
        "value":"43.6", 
        "status":"1" 
       } 
      ], 
      "date":"Tue, 08 Nov 2016 00:00:00 -0600" }, { 
      "candidate":[ 
       { 
        "id":"25624", 
        "name":"Clinton", 
        "affiliation":"Democrat", 
        "color":"", 
        "value":"47.0", 
        "status":"1" 
       }, 
       { 
        "id":"25623", 
        "name":"Trump", 
        "affiliation":"Republican", 
        "color":"", 
        "value":"43.8", 
        "status":"1" 
       } 
      ], 
      "date":"Mon, 07 Nov 2016 00:00:00 -0600" } 

I JSON-Bibliothek zu verwenden, versuchen den ersten Block von JSON lesen kann, aber irrt, wenn mehrere Blöcke zu lesen.

Was ist der richtige Weg, mehrere JSON-Elemente in Python zu lesen.

Vielen Dank im Voraus!

+0

Sie als ein Array von JSON-Objekten erstellen? – bharadhwaj

+0

Gibt es eine Möglichkeit, die gesamte Datei in Array von Json-Objekten zu konvertieren. Alle Zeiger wären hilfreich – Abhi

Antwort

0

Was Sie tun möchten, ist eine Generatorfunktion zu erstellen und nutzen Sie, wie Json in Python implementiert wurde. Hier ist mein Arbeitsbeispiel mit einer Generatorfunktion:

import json 
from splitstream import splitfile 

def generate_json(file_name): 
    for jsonstr in splitfile(open(file_name), format="json"): 
     yield json.loads(jsonstr) 

for item in generate_json('data.json'): 
    print item 

aber Sie könnten Splitstream installieren müssen (durch pip) und umfassen die Generatorfunktion generate_json in Ihrem Code. Was diese Funktion macht, ist ein json-Objekt zu liefern (zurückzugeben), wenn es fertig ist.

+0

In Ihrer Funktion wird jsonstr als Bytes zurückgegeben. json.loads kann keine Bytes verarbeiten, gibt Fehlermeldung zurück: "Traceback (letzter Aufruf zuletzt): Datei" read_polls.py ", Zeile 11, in für Element in generate_json ('testData.json'): Datei "read_polls.py", Zeile 9, in generate_json Ausbeute json.loads (jsonstr) Datei "/Users/ayada/anaconda/lib/python3.5/json/__init__.py", Zeile 312, in Lasten s .__ Klasse __.__ Name__)) TypeError: Das JSON-Objekt muss str sein, nicht 'Bytes' " – Abhi

+0

Ich möchte gerne wissen, was der Typ von jsonstr in Ihrer Funktion ist. Ich benutze Python 3.5 – Abhi

+0

str (jsonstr, 'utf-8'), konvertierte Bytes zu String. Die Lösung hat ordentlich funktioniert. Vielen Dank!! – Abhi