Ich bekomme ein bisschen Kopfschmerzen, nur weil eine einfach aussehende, einfache Aussage einige Fehler in mein Gesicht wirft.
Ich habe eine JSON-Datei namens strings.json wie folgt:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
{"-name": "address", "#text": "Address"}]
Ich möchte die JSON-Datei lesen, genau das für jetzt. Ich habe diese Aussagen, die ich herausgefunden habe, aber es funktioniert nicht:
import json
from pprint import pprint
with open('strings.json') as json_data:
d = json.loads(json_data)
json_data.close()
pprint(d)
Der auf der Konsole angezeigte Fehler war folgender:
Traceback (most recent call last):
File "/home/.../android/values/manipulate_json.py", line 5, in <module>
d = json.loads(json_data)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
[Finished in 0.1s with exit code 1]
Bearbeitet
Geändert von json.loads
zujson.load
und bekam das:
Traceback (most recent call last):
File "/home/.../android/values/manipulate_json.py", line 5, in <module>
d = json.load(json_data)
File "/usr/lib/python2.7/json/__init__.py", line 278, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 829 column 1 - line 829 column 2 (char 18476 - 18477)
[Finished in 0.1s with exit code 1]
{"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ..., {"-name": "address", "#text": "Address"}]}
Antworten:
Die
json.load()
Methode (ohne "s" in "load") kann eine Datei direkt lesen:Sie haben die
json.loads()
Methode verwendet , die nur für Zeichenfolgenargumente verwendet wird .Bearbeiten: Die neue Nachricht ist ein ganz anderes Problem. In diesem Fall enthält diese Datei einen ungültigen JSON. Dafür würde ich empfehlen, die Datei über einen JSON-Validator auszuführen .
Es gibt auch Lösungen zum Beheben von JSON, wie zum Beispiel Wie kann ich eine ungültige JSON-Zeichenfolge automatisch reparieren? .
quelle
Hier ist eine Kopie des Codes, die für mich gut funktioniert
mit den Daten
Möglicherweise möchten Sie Ihre Zeile json.load mit einem try catch abbrechen, da ungültiger JSON eine Stacktrace-Fehlermeldung verursacht.
quelle
Das Problem ist die Verwendung mit Anweisung:
Die Datei wird implizit bereits geschlossen. Sie müssen nicht
json_data.close()
erneut anrufen .quelle
print(json.dumps(d,sort_keys=True,indent=2))
In Python 3 können wir die folgende Methode verwenden.
Aus Datei lesen und in JSON konvertieren
Mit Anweisung wird der geöffnete Dateideskriptor automatisch geschlossen.
Zeichenfolge zu JSON
quelle
Um dies hinzuzufügen, können Sie heute Pandas verwenden, um json zu importieren:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html Möglicherweise möchten Sie den Orient sorgfältig verwenden Parameter.
quelle
Sie können die Pandas-Bibliothek verwenden, um die JSON-Datei zu lesen.
quelle
pd.read_json("strings.json").to_dict()
Das funktioniert bei mir.
json.load () akzeptiert Dateiobjekte , analysiert die JSON-Daten, füllt ein Python-Wörterbuch mit den Daten und gibt sie an Sie zurück.
Angenommen, die JSON-Datei sieht folgendermaßen aus:
quelle