Ich habe ungefähr 2000 JSON-Dateien, die ich durch ein Python-Programm laufen lasse. Ein Problem tritt auf, wenn eine JSON-Datei nicht im richtigen Format vorliegt. (Fehler: ValueError: No JSON object could be decoded
) Ich kann es wiederum nicht in mein Programm einlesen.
Ich mache derzeit so etwas wie das Folgende:
%Vor%Ich weiß, dass es Offline-Methoden gibt, um JSON-Dateien zu validieren und zu formatieren, aber gibt es eine programmatische Möglichkeit, diese Dateien zu überprüfen und zu formatieren? Wenn nicht, gibt es eine kostenlose / billige Alternative, um all diese Dateien offline zu reparieren, d. H. Ich führe das Programm einfach in dem Ordner mit allen JSON-Dateien aus und formatiere sie nach Bedarf?
Gelöst mit @ Reece Kommentar:
%Vor%Es stellt sich heraus, dass ich eine Datei, die nicht im JSON-Format ist, in meinem Arbeitsverzeichnis gespeichert habe, das derselbe Ort ist, an dem ich Daten gelesen habe. Danke für die hilfreichen Vorschläge.
Das integrierte JSON-Modul kann als Validator verwendet werden:
%Vor%Sie können mit Dateien arbeiten, indem Sie:
verwenden %Vor% anstelle von json.loads
und Sie können den Dateinamen auch in die Fehlermeldung einfügen.
In Python 3.3.5, für {test: "foo"}
, bekomme ich:
und am 2.7.6:
%Vor% Dies liegt daran, dass der korrekte JSON {"test": "foo"}
ist.
Beim Umgang mit den ungültigen Dateien ist es am besten, sie nicht weiter zu verarbeiten. Sie können eine Datei skipped.txt erstellen, die die Dateien mit dem Fehler auflistet, so dass sie von Hand überprüft und repariert werden können.
Wenn möglich, sollten Sie die Site / das Programm, das die ungültigen json-Dateien generiert hat, überprüfen und dann die json-Datei neu generieren. Andernfalls werden Sie weiterhin neue Dateien haben, die JSON ungültig sind.
Andernfalls müssen Sie einen benutzerdefinierten JSON-Parser schreiben, der häufige Fehler behebt. Damit sollten Sie das Original unter Versionskontrolle setzen (oder archivieren), damit Sie die Unterschiede sehen und überprüfen können, die das automatisierte Tool behebt (als Plausibilitätsprüfung). Unklare Fälle sollten von Hand behoben werden.
Ja, es gibt Möglichkeiten, zu validieren, dass eine JSON-Datei gültig ist. Eine Möglichkeit besteht darin, eine JSON-Parsing-Bibliothek zu verwenden, die Ausnahmen auslöst, wenn die von Ihnen bereitgestellte Eingabe nicht gut formatiert ist.
%Vor%Natürlich, wenn Sie es reparieren möchten, können Sie natürlich keinen JSON-Loader verwenden, da es sich um einen ungültigen JSON handelt. Es sei denn, die Bibliothek, die Sie verwenden, wird automatisch Dinge für Sie reparieren, in welchem Fall Sie wahrscheinlich nicht diese Frage haben würden.
Eine Möglichkeit besteht darin, die Datei manuell zu laden und zu tokenisieren und Fehler zu erkennen und zu versuchen, sie zu beheben, aber ich bin mir sicher, dass es Fälle gibt, in denen der Fehler nicht automatisch behoben werden kann und besser wäre Auswerfen eines Fehlers und Bitten des Benutzers, seine Dateien zu reparieren.
Ich habe selbst keinen JSON-Fixer geschrieben, daher kann ich keine Details dazu liefern, wie Sie Fehler beheben könnten.
Ich bin mir jedoch nicht sicher, ob es eine gute Idee wäre, alle Fehler zu beheben, da Sie dann davon ausgehen, dass Ihre Korrekturen genau das sind, was der Benutzer wirklich möchte. Wenn es ein fehlendes Komma oder ein zusätzliches abschließendes Komma ist, dann ist das möglicherweise in Ordnung, aber es kann Fälle geben, in denen es unklar ist, was der Benutzer wünscht.