Häufige JSON-Fehler und wie man sie behebt

Aktualisiert:

JSON ist das Format, in dem viele APIs, Konfigurationsdateien und Web-Apps Daten austauschen, und seine Grammatik passt auf eine einzige Seite. Gerade deshalb verzeiht es nichts: Ein Text ist entweder gültiges JSON oder nicht, und ein einziges überzähliges Komma genügt, damit ein Parser das Ganze ablehnt. Die meisten Fehler gehen auf dieselben wenigen Gewohnheiten zurück, viele davon aus JavaScript oder anderen Sprachen übernommen. Dieser Ratgeber zeigt die Regeln, die Fehler, die am häufigsten gegen sie verstoßen, wie man die Fehlermeldung liest und einige Fälle, die gültiges JSON sind, aber trotzdem Probleme verursachen.

Welche Regeln JSON tatsächlich hat

Die aktuellen Definitionen sind RFC 8259, veröffentlicht im Dezember 2017, und ECMA-404. Beide beschreiben dieselbe Syntax:

Zwischen den Tokens sind nur vier Leerraumzeichen erlaubt: Leerzeichen, Tabulator, Zeilenvorschub und Wagenrücklauf.

Die häufigsten Fehler

Jeder dieser Fälle wird von einem standardkonformen Parser abgelehnt. Die Lösung steht jeweils in der Beschreibung.

JSON-Formatierer & Konverter

Die Fehlermeldung lesen

Ein Parser liest den Text von links nach rechts und bricht beim ersten Zeichen ab, das er nicht akzeptieren kann. Die Position in der Fehlermeldung ist also die Stelle, an der er aufgegeben hat – oft direkt hinter dem eigentlichen Fehler. Bei einem nachgestellten Komma beschwert sich der Parser über die schließende geschweifte Klammer, weil er nach einem Komma einen weiteren Eigenschaftsnamen erwartet. Fehlt eine Klammer, kann der Fehler ganz am Ende des Textes auftauchen, weit entfernt von der Stelle, an der die Klammer hätte stehen sollen.

Der Wortlaut unterscheidet sich je nach Browser und Sprache, und viele Meldungen nennen eine Position, wenn auch nicht alle – entweder als Zahl der Zeichen ab dem Anfang oder als Zeile und Spalte. Die JavaScript-Engine von Chrome meldet {"name":"Ana",} zum Beispiel so:

Ist die Position nicht offensichtlich, lohnt ein Blick auf das Zeichen direkt davor; außerdem sollte man prüfen, ob jede öffnende Klammer und jedes Anführungszeichen vor dieser Stelle ein Gegenstück hat. Ein Editor, der zusammengehörige Klammern hervorhebt, macht eine fehlende oft leicht erkennbar.

Gültiges JSON, das trotzdem Probleme macht

JSON ist nicht JavaScript

Die Syntax von JSON wurde von JavaScript-Objektliteralen übernommen, deshalb werden die beiden so leicht verwechselt. Ein JavaScript-Objektliteral akzeptiert einfache Anführungszeichen, Namen ohne Anführungszeichen, nachgestellte Kommas, Kommentare und Werte wie undefined; JSON akzeptiert nichts davon. Code, der in ein Skript eingefügt funktioniert, kann deshalb als JSON-Datei scheitern.

Manche Werkzeuge akzeptieren erweiterte Formate wie JSON5 oder „JSON mit Kommentaren“ für Konfigurationsdateien. Wo sie unterstützt werden, sind sie praktisch, aber sie sind kein JSON, und ein standardkonformer Parser – auch der nTools-Formatierer – lehnt sie ab.

Häufige Fragen

Kann JSON Kommentare enthalten?

Nein. Die Spezifikation kennt keine Syntax für Kommentare. Wer Notizen in den Daten braucht, legt sie in eine Eigenschaft wie "_comment" oder verwendet ein Format, das Kommentare erlaubt, sofern die Werkzeuge es unterstützen.

Warum funktioniert mein JSON in JavaScript, aber nicht in einem Validator?

Weil ein JavaScript-Objektliteral Dinge erlaubt, die JSON nicht erlaubt, etwa einfache Anführungszeichen, nachgestellte Kommas und Namen ohne Anführungszeichen. In Code eingefügt läuft es; als JSON gespeichert ist es ungültig.

Wie bleibt eine sehr große Zahl exakt?

Man sendet sie als String, zum Beispiel "9007199254740993", und wandelt sie auf der Empfängerseite in einen Typ um, der sie aufnehmen kann, etwa BigInt in JavaScript.

Sendet der nTools-Formatierer mein JSON irgendwohin?

Nein. Es wird im eigenen Browser geparst und formatiert, und wenn der Browser eine Position meldet, zeigt der Formatierer sie als Zeile und Spalte an.

Weitere Ratgeber