Zum Inhalt springen
jsonbeautifiers
Deutsch

JSON reparieren

Behebt Komma am Ende, einfache Anführungszeichen, Kommentare und Python-Literale, mit einer Liste jeder Änderung.

Mit JSONPath filtern

RFC-9535-Syntax. Das Ergebnis ersetzt den Bereich, aus dem Sie das Fenster geöffnet haben.

 

Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen

Die Reparatur nimmt etwas, das beinahe JSON ist, und macht es gültig. Kommas am Ende, einfache Anführungszeichen, Schlüssel ohne Anführungszeichen, Kommentare, Python-Literale, typografische Anführungszeichen, nicht geschlossene Klammern, unsichtbarer Leerraum.

Das Interessante ist nicht die Ausgabe, sondern das Änderungsprotokoll. Ein Reparaturwerkzeug, das Ihr Payload stillschweigend umschreibt, ist schlimmer als gar keines, weil Sie nicht erkennen können, was es an Ihrer Stelle entschieden hat. Jede Änderung steht mit Zeile und Spalte im Protokoll, und die mit einer Ermessensentscheidung stehen getrennt von denen ohne.

Was es behebt, ohne raten zu müssen

Diese Fälle haben genau eine sinnvolle Lesart und werden daher ohne weiteren Kommentar als den Protokolleintrag angewendet.

Kommas am Ende und doppelte Kommas
Werden entfernt. In JavaScript und JSON5 erlaubt, in JSON nie.
Zeichenketten in einfachen Anführungszeichen
Werden auf doppelte Anführungszeichen umgestellt, wobei der Inhalt neu escapt wird, damit ein Apostroph darin das Ergebnis nicht zerstört.
Schlüssel ohne Anführungszeichen
Bekommen welche. JavaScript erlaubt nackte Bezeichner als Schlüssel, JSON nicht.
Kommentare
Werden entfernt, sowohl in der //- als auch in der /* */-Form.
Python-Literale
True, False und None werden zu true, false und null.
Typografische Anführungszeichen
Die geschwungenen Anführungszeichen aus der Autokorrektur werden zu geraden ASCII-Anführungszeichen.
Ungültiger Leerraum
Geschützte Leerzeichen und Verwandte werden zu gewöhnlichen Leerzeichen; Zeichen ohne Breite werden entfernt.
Ein Byte Order Mark
Wird am Dokumentanfang entfernt.
Fehlende Kommas und Doppelpunkte
Werden dort eingefügt, wo die Grammatik die Absicht eindeutig macht.
Rohe Steuerzeichen in Zeichenketten
Werden escapt, sodass ein literaler Zeilenumbruch zu \n wird.

Was es als Ermessensentscheidung kennzeichnet

Diese verändern die Bedeutung, und keine Voreinstellung passt für alle. Sie werden angewendet, getrennt aufgelistet und sind einstellbar.

Führende Nullen
Standardmäßig wird der Wert in Anführungszeichen gesetzt: Aus 02134 wird die Zeichenkette "02134". Führende Nullen in echten Daten sind fast immer eine Postleitzahl, eine Kontonummer oder eine Artikelnummer, wo ihr Wegfall den Wert stillschweigend zerstört. Ist es wirklich eine Zahl, stellen Sie die Regel auf Umwandeln um und es wird 2134.
NaN, Infinity und undefined
Werden zu null, was die meisten Encoder ebenfalls einsetzen. Python gibt aus json.dumps standardmäßig NaN und Infinity aus; mit allow_nan=False fangen Sie es dort ab, wo es entsteht.
Nackte Wörter als Werte
Werden als Zeichenketten in Anführungszeichen gesetzt. Aus {"status": pending} wird {"status": "pending"} - meistens richtig, gelegentlich nicht.
Nicht geschlossene Klammern
Werden am Dokumentende geschlossen. War die Datei abgeschnitten statt vertippt, entsteht dabei gültiges JSON, in dem Daten fehlen - deshalb wird die Änderung immer aufgeführt.
NDJSON
Mehrere vollständige Werte, einer pro Zeile, werden standardmäßig in ein Array gepackt. Sie können stattdessen nur den ersten Datensatz behalten oder die Eingabe unangetastet lassen.

Was es nicht tut

Es erfindet keine Struktur. Ist die Eingabe nicht nahe genug an JSON, schlägt die Reparatur fehl und nennt die Fehler, die sie nicht auflösen konnte, statt etwas zu erzeugen, das sich zwar parsen lässt, aber nichts bedeutet.

Außerdem läuft eine begrenzte Anzahl an Durchgängen. Jeder Durchgang kann ein Problem freilegen, das der vorige verdeckt hat, aber der Vorgang konvergiert, statt in eine Schleife zu geraten.

How to do this in code

Dasselbe im Code - mit dem ehrlichen Vorbehalt, dass nachsichtiges Parsen beim Konsumenten meistens bedeutet, dass weiter oben etwas schlechtes JSON erzeugt und das auch weiterhin tun wird.

py Python, dict repr

ast.literal_eval wertet nur literale Strukturen aus und kann deshalb - anders als eval - keinen beliebigen Code ausführen.

import ast, json

# A Python dict printed with str() or print() is not JSON.
text = "{'name': 'Priya', 'active': True}"

value = ast.literal_eval(text)   # safe: literals only, no eval
clean = json.dumps(value)        # '{"name": "Priya", "active": true}'
js JavaScript, JSON5

JSON5 ist eine Obermenge mit einer echten Spezifikation, was es zu einem besseren Ziel macht als ein selbstgebauter nachsichtiger Parser.

import JSON5 from 'json5';

// Accepts comments, trailing commas, unquoted keys, single
// quotes, hex numbers and more.
const value = JSON5.parse(text);
const strict = JSON.stringify(value);
ts TypeScript, JSONC
import { parse } from 'jsonc-parser';

// What VS Code uses for its own settings files: comments and
// trailing commas, and nothing else.
const errors: ParseError[] = [];
const value = parse(text, errors);
sh Shell
# Strip comments and trailing commas with jq's relaxed reader
jq --args . <<< "$text"

# Or normalise a JSON5 file
npx json5 -c config.json5 > config.json

Häufige Fragen

Verändert die Reparatur jemals meine Daten?
Nur auf die unter Ermessensentscheidungen aufgeführten Arten, und jede davon steht mit Zeile und Spalte im Änderungsprotokoll. Sichere Reparaturen betreffen ausschließlich die Syntax. Wenn Ihnen eine Entscheidung nicht passt, ändern Sie die Einstellung und lassen es erneut laufen.
Warum wird aus 02134 eine Zeichenkette und nicht die Zahl 2134?
Weil Quotieren verlustfrei ist und Abschneiden nicht. In echten Daten sind führende Nullen fast immer bedeutungstragend, und ein Konverter, der stillschweigend eine Postleitzahl in eine kleinere Zahl verwandelt, würde genau den leisen Schaden anrichten, gegen den es diese Seite gibt. Die Abschneide-Option ist einen Klick entfernt.
Es sagt, mein Dokument sei nicht reparierbar. Was jetzt?
Schicken Sie es durch den Validator. Die Reparatur behandelt nur Probleme mit einer eindeutigen Lösung; ein Dokument mit wirklich unrettbarer Struktur braucht einen Menschen, der entscheidet, was gemeint war.