JSON-Fehler, erklärt
Jede Seite hier nimmt eine exakte Fehlermeldung und beantwortet drei Fragen: worüber sich der Parser tatsächlich beklagt hat, was es in echtem Code auslöst, nach Häufigkeit geordnet, und was zu ändern ist. Jede bindet den Validator ein, sodass Sie Ihr Payload reparieren können, ohne die Seite zu verlassen.
Die Meldungen sind gemessen und nicht erinnert. Jede V8- und Python-Zeichenkette auf dieser Seite stammt aus einem Lauf des Parsers. Die Zeichenketten von Firefox und Safari fehlen bewusst, weil wir sie nicht ausführen und prüfen konnten, und eine Vermutung über eine Fehlermeldung zu veröffentlichen wäre auf einer Seite, deren ganzes Argument die Richtigkeit ist, ein schlechtes Geschäft.
Oder fügen Sie einfach das Payload ein
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
JavaScript, Node und Chrome
Gemessen auf Node v24.15.0 mit V8 13.6.233.17. V8 hat 2022 fast alle diese Meldungen neu geschrieben, deshalb trägt jede Seite sowohl den heutigen Wortlaut als auch den, den Sie in älteren Antworten finden.
-
Unexpected token '<', "<!DOCTYPE "... is not valid JSONDer Server hat eine Fehlerseite geliefert , und 4 weitere Ursachen. -
Unexpected end of JSON inputDie Zeichenkette ist leer , und 4 weitere Ursachen. -
"[object Object]" is not valid JSONDer Wert war bereits geparst , und 2 weitere Ursachen. -
"undefined" is not valid JSONEin Speicherschlüssel, der nie gesetzt wurde , und 2 weitere Ursachen. -
Unexpected non-whitespace character after JSON at position N (line L column C)Die Eingabe ist NDJSON oder JSON Lines , und 3 weitere Ursachen. -
Bad control character in string literal in JSON at position N (line L column C)Mehrzeiliger Text direkt in eine Zeichenkette eingefügt , und 3 weitere Ursachen. -
Bad escaped character in JSON at position N (line L column C)Ein Windows-Dateipfad mit einfachen Backslashes , und 3 weitere Ursachen. -
Expected double-quoted property name in JSON at position N (line L column C)Ein Komma vor der schließenden geschweiften Klammer , und 2 weitere Ursachen. -
Expected property name or '}' in JSON at position N (line L column C)Schlüssel in einfachen Anführungszeichen, aus einem mit str() ausgegebenen Python-Dict , und 3 weitere Ursachen. -
Expected ',' or '}' after property value in JSON at position N (line L column C)Ein fehlendes Komma zwischen Eigenschaften , und 3 weitere Ursachen. -
Unterminated string in JSON at position N (line L column C)Ein nicht escaptes doppeltes Anführungszeichen im Wert , und 3 weitere Ursachen.
Python
Gemessen auf CPython 3.14.3. Zwei dieser Meldungen sind neu in Python 3.13, die Version zählt also, und jede Seite sagt welche.
-
Expecting value: line 1 column 1 (char 0)Der Antwortkörper ist HTML, nicht JSON , und 3 weitere Ursachen. -
Extra data: line L column C (char N)Die Datei ist JSON Lines , und 2 weitere Ursachen. -
Expecting ',' delimiter: line L column C (char N)Ein nicht escaptes doppeltes Anführungszeichen in einer Zeichenkette , und 3 weitere Ursachen. -
Expecting property name enclosed in double quotes: line L column C (char N)Ein Python-Dict ausgegeben statt serialisiert , und 2 weitere Ursachen. -
Invalid control character at: line L column C (char N)Mehrzeiliger Text in einer Zeichenkette , und 2 weitere Ursachen. -
Invalid \escape: line L column C (char N)Ein Windows-Pfad , und 2 weitere Ursachen. -
Unterminated string starting at: line L column C (char N)Ein nicht escaptes Anführungszeichen im Wert , und 2 weitere Ursachen.
PHP
PHP scheitert standardmäßig stumm, und genau das ist das eigentliche Problem. Die Seite zeigt, wie man ihm doch eine Meldung entlockt.
C# und .NET
Newtonsoft.Json und System.Text.Json formulieren denselben Fehlschlag unterschiedlich.
Java
Jackson, also das, was im JVM-Ökosystem fast alles darunter benutzt.
Die vier Fehler hinter den meisten davon
Nehmen Sie den Wortlaut weg, und fast jede Meldung auf dieser Seite kommt von einer von vier Sachen.
- Es ist überhaupt kein JSON
- Eine HTML-Fehlerseite, ein leerer Körper, eine Klartextmeldung. Der Parser hat recht und die Anfrage ist falsch. Prüfen Sie den Statuscode und den Content-Type, bevor Sie den Körper prüfen.
- Es ist JavaScript oder Python, nicht JSON
- Einfache Anführungszeichen, Schlüssel ohne Anführungszeichen, nachgestellte Kommas, True und None. Fast immer ein Dict oder ein Objektliteral, das gedruckt statt serialisiert wurde. Die Reparatur behebt all das.
- Eine Zeichenkette wurde durch Verkettung gebaut
- Was heißt, dass Werte nie escapt wurden: Ein Anführungszeichen oder ein Zeilenumbruch in einem davon zerlegt das Dokument. Stattdessen zu serialisieren macht diese Fehlerklasse unmöglich.
- Es sind mehrere Dokumente, nicht eins
- NDJSON als einzelner Wert gelesen. Lesen Sie es zeilenweise oder packen Sie die Datensätze in ein Array.