Ich habe diesen JSON in einer Datei:
{
"maps": [
{
"id": "blabla",
"iscategorical": "0"
},
{
"id": "blabla",
"iscategorical": "0"
}
],
"masks": [
"id": "valore"
],
"om_points": "value",
"parameters": [
"id": "valore"
]
}
Ich habe dieses Skript geschrieben, um alle JSON-Daten zu drucken:
import json
from pprint import pprint
with open('data.json') as f:
data = json.load(f)
pprint(data)
Dieses Programm löst jedoch eine Ausnahme aus:
Traceback (most recent call last):
File "<pyshell#1>", line 5, in <module>
data = json.load(f)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 13 column 13 (char 213)
Wie kann ich den JSON analysieren und seine Werte extrahieren?
Antworten:
Ihre Daten haben kein gültiges JSON- Format. Sie haben,
[]
wann Sie haben sollten{}
:[]
sind für JSON-Arrays, dielist
in Python aufgerufen werden{}
sind für JSON-Objekte, diedict
in Python aufgerufen werdenSo sollte Ihre JSON-Datei aussehen:
Dann können Sie Ihren Code verwenden:
Mit Daten können Sie jetzt auch folgende Werte finden:
Probieren Sie diese aus und sehen Sie, ob es Sinn macht.
quelle
u'
vor jedem Schlüssel ein hinzu. Irgendeine Idee warum?Du
data.json
solltest so aussehen:Ihr Code sollte sein:
Beachten Sie, dass dies nur in Python 2.6 und
with
höher funktioniert, da dies von der Anweisung abhängt . In Python 2.5from __future__ import with_statement
finden Sie in Python <= 2.4 die Antwort von Justin Peel , auf der diese Antwort basiert.Sie können jetzt auch auf einzelne Werte wie diesen zugreifen:
quelle
data_file
open
länger als nötig gespeichert bleiben.pprint
Sie imwith
Kontext stehen, bleibt dasdata_file
länger geöffnet.data["om_points"]
,data["masks"]["id"]
. Die Idee ist, dass Sie jede Ebene in einem Wörterbuch erreichen können, indem Sie die 'Schlüsselpfade' angeben. Wenn Sie eineKeyError
Ausnahme erhalten, bedeutet dies, dass der Schlüssel nicht im Pfad vorhanden ist. Achten Sie auf Tippfehler oder überprüfen Sie die Struktur Ihres Wörterbuchs.Die Antwort von Justin Peel ist wirklich hilfreich, aber wenn Sie Python 3 verwenden, sollte das Lesen von JSON folgendermaßen erfolgen:
Hinweis: Verwenden Sie
json.loads
anstelle vonjson.load
. Nimmt in Python 3json.loads
einen Zeichenfolgenparameter an.json.load
Nimmt einen dateiähnlichen Objektparameter.data_file.read()
Gibt ein String-Objekt zurück.Um ehrlich zu sein, denke ich nicht, dass es in den meisten Fällen ein Problem ist, alle JSON-Daten in den Speicher zu laden.
quelle
json.load
zugunsten von.loads
Python 3 vermieden werden ?load
.quelle
json.loads
dekodiert nicht mehrere JSON-Objekte. Andernfalls wird der Fehler "Zusätzliche Daten" angezeigt.}
,]
oder"
). Daher können Sie tatsächlich mehrere Objekte in einer einzelnen Zeichenfolge oder Datei ohne Mehrdeutigkeit verketten. Das Problem hierbei ist, dass ein Parser, der ein einzelnes Objekt erwartet, fehlschlägt, wenn mehr als ein Objekt übergeben wird..jsonl
(json lines). Die Objekte werden durch ein Zeilenumbruchzeichen getrennt, wodurch die Vorverarbeitung für das Parsen trivial wird und ermöglicht um Dateien einfach zu teilen / zu stapeln, ohne sich um Start- / Endmarkierungen sorgen zu müssen."Ultra JSON" oder einfach "ujson" kann die
[]
Eingabe in Ihre JSON-Datei verarbeiten. Wenn Sie eine JSON-Eingabedatei als Liste von JSON-Elementen in Ihr Programm einlesen; wie[{[{}]}, {}, [], etc...]
kann ujson beliebige Reihenfolge der Listen von Wörterbuch, Wörterbücher von Listen handhaben .Sie finden ujson im Python- Paketindex und die API ist fast identisch mit der in Python integrierten
json
Bibliothek.ujson ist auch viel schneller, wenn Sie größere JSON-Dateien laden. Sie können die Leistungsdetails im Vergleich zu anderen Python-JSON-Bibliotheken unter demselben Link anzeigen.
quelle
Wenn Sie Python3 verwenden, können Sie versuchen, Ihren (
connection.json
Datei-) JSON in Folgendes zu ändern :Verwenden Sie dann den folgenden Code:
quelle
with
Aussage zu verwenden wäre besserHier geht es mit geänderter
data.json
Datei:Sie können Daten auf der Konsole aufrufen oder drucken, indem Sie die folgenden Zeilen verwenden:
Erwartete Ausgabe für
print(data_item['parameters'][0]['id'])
:Erwartete Ausgabe für
print(data_item['parameters'][0]['id'])
:quelle
Bei dieser Analyse gibt es zwei Arten.
Aus einer Datei können Sie Folgendes verwenden
In diesem Artikel wird das vollständige Parsen und Abrufen von Werten anhand von zwei Szenarien erläutert. Analysieren von JSON mit Python
quelle
Als python3 Benutzer ,
Der Unterschied zwischen
load
undloads
Methoden ist besonders wichtig, wenn Sie JSON-Daten aus einer Datei lesen.Wie in den Dokumenten angegeben:
json.load:
json.loads:
Die Methode json.load kann geöffnete JSON-Dokumente direkt lesen, da sie Binärdateien lesen kann.
Infolgedessen sind Ihre JSON-Daten in einem Format verfügbar, das gemäß dieser Konvertierungstabelle angegeben wurde:
https://docs.python.org/3.7/library/json.html#json-to-py-table
quelle