Dieser Artikel befasst sich mit der Herausforderung beim Extrahieren von Daten aus einer JSON-Datei, die mehrere verschachtelte JSON-Objekte enthält. Solche Dateien stellen beim Umgang mit großen Datensätzen oft eine Herausforderung dar.
Stellen Sie sich eine JSON-Datei mit mehreren JSON-Objekten wie folgt vor:
<code class="json">{"ID":"12345","Timestamp":"20140101", "Usefulness":"Yes", "Code":[{"event1":"A","result":"1"},…]} {"ID":"1A35B","Timestamp":"20140102", "Usefulness":"No", "Code":[{"event1":"B","result":"1"},…]} {"ID":"AA356","Timestamp":"20140103", "Usefulness":"No", "Code":[{"event1":"B","result":"0"},…]} …</code>
Die Aufgabe besteht darin, sie zu extrahieren die Werte „Zeitstempel“ und „Nützlichkeit“ von jedem Objekt in einen Datenrahmen:
Timestamp | Usefulness |
---|---|
20140101 | Yes |
20140102 | No |
20140103 | No |
... | ... |
Um dieser Herausforderung zu begegnen, verwenden wir die Methode json.JSONDecoder.raw_decode in Python . Diese Methode ermöglicht die Dekodierung großer Zeichenfolgen „gestapelter“ JSON-Objekte. Es gibt die letzte Position des analysierten Objekts und ein gültiges Objekt zurück. Indem wir die zurückgegebene Position an raw_decode zurückgeben, können wir die Analyse ab diesem Punkt fortsetzen.
<code class="python">from json import JSONDecoder, JSONDecodeError import re NOT_WHITESPACE = re.compile(r'\S') def decode_stacked(document, pos=0, decoder=JSONDecoder()): while True: match = NOT_WHITESPACE.search(document, pos) if not match: return pos = match.start() try: obj, pos = decoder.raw_decode(document, pos) except JSONDecodeError: # Handle errors appropriately raise yield obj s = """ {“a”: 1} [ 1 , 2 ] """ for obj in decode_stacked(s): print(obj)</code>
Dieser Code durchläuft die JSON-Objekte in der Zeichenfolge s und gibt jedes Objekt aus:
{'a': 1} [1, 2]
Die bereitgestellte Lösung bewältigt effektiv die Herausforderung, Daten aus mehreren verschachtelten JSON-Objekten zu extrahieren, die in einer einzigen Datei eingebettet sind. Durch die Verwendung der Methode json.JSONDecoder.raw_decode und die Behandlung potenzieller Fehler können wir große Datensätze effizient verarbeiten. Die Funktion decode_stacked kann als wiederverwendbares Tool zum Umgang mit solchen Dateiformaten verwendet werden.
Das obige ist der detaillierte Inhalt vonWie kann man JSON-Daten mit mehreren eingebetteten Objekten in Python effizient analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!