Technik-Hilfe
Warum sagt JSON.parse "Unexpected token"?
JSON.parse wirft Unexpected token, wenn der Text kein gültiges JSON ist. Einfache Anführungszeichen, Trailing Commas, HTML-Antworten und die Fehlerposition prüfen.
JSON.parse() wirft einen SyntaxError, wenn die Eingabe kein gültiges JSON ist. „Unexpected token“ bedeutet in der Regel, dass der Parser ein Zeichen erreicht hat, das an dieser Stelle der Struktur nicht erlaubt ist.
Häufige Ursachen: einfache Anführungszeichen, Trailing Commas, Eigenschaftsnamen ohne Quotes, schlechtes String-Escaping, Extra-Text um das JSON herum oder das Parsen von HTML oder einem anderen Nicht-JSON-Body als JSON.
Der genaue Fehlerwortlaut hängt von JavaScript-Engine und Browser ab. Gehen Sie nicht davon aus, dass jede Runtime „Unexpected token X in JSON at position N“ ausgibt.
Das ist JSON.parse-Unexpected-token-Diagnose: was der Fehler bedeutet, wie man die Position liest und was zu tun ist, wenn der Body HTML ist. Trailing Commas, Anführungszeichen und Unexpected end behandelt Häufige JSON-Fehler: Trailing Commas, Anführungszeichen und Unexpected token breiter.
Was bedeutet “Unexpected token” in JSON.parse()?
JSON.parse() verlangt JSON-Grammatik. Ein illegales Zeichen an der aktuellen Position wirft SyntaxError. {“name”:“Alex”,} ist ungültig: nach diesem Komma darf das Objekt nicht enden. Meldungstext und Position variieren weiterhin je Runtime.
Welchen Fehler wirft JSON.parse()?
Ungültiges JSON wirft in der Regel SyntaxError. error.name loggen, um den Typ zu bestätigen. error.message nicht vollständig hart kodieren: Engines und Versionen formulieren unterschiedlich.
try {
JSON.parse('{"name":"Alex",}');
} catch (error) {
console.log(error.name);
// SyntaxError
}
1. Einfache statt doppelte Anführungszeichen
{‘name’:‘Alex’} ist ungültiges JSON. {“name”:“Alex”} ist gültig. JSON-Strings und Objekt-Membernamen nutzen doppelte Anführungszeichen. Ein JavaScript-Objektliteral wie const user = { name: ‘Alex’ } kann legales JavaScript sein und trotzdem kein JSON-Text.
Ungültig
{'name':'Alex'}
Gültig
{"name":"Alex"}
2. Trailing Commas
Ein Komma nach der letzten Eigenschaft oder dem letzten Array-Element ist in Standard-JSON ungültig. {“name”:“Alex”,“age”:30,} und [1, 2, 3,] scheitern beide. Als eine Unexpected-token-Ursache behandeln; Häufige JSON-Fehler: Trailing Commas, Anführungszeichen und Unexpected token vertieft Trailing Commas.
Ungültig
{
"name": "Alex",
"age": 30,
}
Gültig
{
"name": "Alex",
"age": 30
}
[1, 2, 3,]
3. Eigenschaftsnamen ohne Anführungszeichen
{ name: “Alex” } kann ein JavaScript-Objektliteral sein. In JSON sind Membernamen Strings und brauchen doppelte Anführungszeichen: {“name”:“Alex”}.
Ungültig
{
name: "Alex"
}
Gültig
{
"name": "Alex"
}
4. Ungültiges String-Escaping
Im JSON-Text beginnt ein Backslash ein Escape. Ein Rohpfad wie C:\Users\Alex ist ungültig, weil \U kein legales Escape ist. Backslashes verdoppeln. Hostsprachen-Escaping nicht mit JSON-Escaping mischen. Häufige JSON-Fehler: Trailing Commas, Anführungszeichen und Unexpected token geht tiefer darauf ein.
Ungültig
{"file":"C:\Users\Alex"}
Gültig
{"file":"C:\\Users\\Alex"}
5. Extra-Text vor oder nach dem JSON
JSON.parse erwartet einen JSON-Wert. Ein Präfix wie Success: vor {“ok”:true} oder ein Suffix wie done danach macht den ganzen String ungültig. Unbedeutender Leerraum um einen einzelnen JSON-Wert ist erlaubt. JSON verbietet Leerzeichen vor oder nach dem Wert nicht.
Success:
{"ok":true}
{"ok":true}
done
6. HTML statt JSON parsen
response.json() auf einer HTML-Seite aufzurufen ist ein häufiger Unexpected-token-Fall. Falsche Endpoints, 404- oder 500-HTML-Seiten, Login-Redirects, Proxy-Bodies und Fallback-Seiten beginnen oft mit Markup. „Unexpected token < always means HTML“ ist zu stark: < ist ein Hinweis, kein Beweis.
fetch('/api/data')
.then(response => response.json())
Was bedeutet “Unexpected token <” meist?
JSON-Werte beginnen normalerweise nicht mit <. Beginnt der Body mit oder , kann < das erste illegale Zeichen sein. Beim lokalen Debuggen HTTP-Status, Content-Type und den Roh-Body prüfen. Die Engine-Formulierung variiert weiterhin.
Die Antwort prüfen, bevor sie geparst wird
Der fetch-Body kann nur einmal gelesen werden. Beim lokalen Debuggen zuerst text() lesen, ein kurzes Präfix prüfen, dann JSON.parse auf denselben String anwenden. Nicht response.json() und danach response.text() auf derselben Antwort aufrufen. Sensible Produktions-Payloads nicht standardmäßig loggen.
const response = await fetch(url);
const text = await response.text();
console.log(response.status);
console.log(response.headers.get("content-type"));
console.log(text.slice(0, 200));
try {
const data = JSON.parse(text);
console.log(data);
} catch (error) {
console.error("Invalid JSON:", error);
}
Was bedeutet “at position 123”?
Manche Engines melden Position, Zeile oder Spalte. In der Nähe nach einem schlechten Quote, Komma, einer Klammer oder einem Escape schauen. Dieser Index ist, wo das Parsen ein Problem bemerkte; die echte Ursache kann früher liegen. Es ist nicht garantiert das exakt fehlerhafte Zeichen.
Unexpected token gegenüber Unexpected end
Unexpected token heißt, der Parser traf auf ein Zeichen, das er nicht erwartet hat. Unexpected end kann erscheinen, wenn die Eingabe endet, bevor der Wert vollständig ist, etwa {“name”:“Alex” ohne schließende Klammer. Der genaue Wortlaut ist engineabhängig. Häufige JSON-Fehler: Trailing Commas, Anführungszeichen und Unexpected token behandelt unvollständiges JSON breiter.
{"name":"Alex"
JSON ist nicht dasselbe wie ein JavaScript-Objektliteral
JSON ist ein Datenformat. Ein JavaScript-Objektliteral ist JavaScript-Syntax. Das JS-Objekt mit unquoted Keys, einfachen Anführungszeichen und einem Trailing Comma ist kein gültiger JSON-Text. JSON.parse kann JavaScript-Objektliterale nicht sicher parsen.
const data = {
name: 'Alex',
active: true,
};
{
"name": "Alex",
"active": true
}
Darf JSON Kommentare enthalten?
Standard-JSON unterstützt keine Kommentare. Eine //-Zeile in einem Objekt ist ungültig. JSON5 und ähnliche Erweiterungen sind andere Formate. JSON formatieren und vergleichen prüft Standard-JSON mit JSON.parse und behandelt JSON5 nicht als JSON.
{
// user name
"name": "Alex"
}
Sind undefined, NaN und Infinity gültiges JSON?
Nein. JSON-Werte sind Objekt, Array, String, Zahl, true, false und null. undefined, NaN und Infinity sind es nicht. Ein Top-Level-Wert muss kein Objekt oder Array sein: true, 123, “hello” und null sind gültiges JSON.
{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null
Unexpected-token-Fehler Schritt für Schritt beheben
An der Quelle arbeiten, nicht am Fehlerstring:
- Bestätigen, dass die Eingabe wirklich JSON ist, nicht HTML, Logs oder JavaScript.
- Die ersten Zeichen der Roheingabe prüfen.
- Kam sie von einer API, HTTP-Status und Content-Type prüfen. Weder 200 noch application/json garantieren gültiges JSON.
- Die Syntax in einem JSON-Parser validieren.
- Gemeldete Position, Zeile oder Spalte als Hinweis nutzen, nicht als garantierte Wurzelursache.
- Quotes, Kommas, geschweifte und eckige Klammern sowie Escapes in der Nähe prüfen.
- Mit einer formatierten, validierten Kopie vergleichen.
- Serializer oder Endpoint korrigieren. Das gemeldete Token nicht zufällig löschen.
Ein globales Ersetzen von ' durch " kann Apostrophe in Strings, bereits escaped Text und Nicht-JSON-Quellen zerstören. Gültiges JSON aus dem echten Serializer erzeugen. eval nicht als JSON-Parser behandeln.
JSON.stringify() nutzen, wenn JavaScript JSON erzeugt
JSON.stringify dem manuellen Zusammenkleben von Strings vorziehen. Es erzeugt gültigen JSON-Text für die serialisierten Werte. Es erhält nicht jeden JavaScript-Wert: undefined, Funktionen und Symbole haben Sonderverhalten. Das Detail liegt hier außerhalb des Rahmens.
const data = {
name: "Alex",
active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}
Ungültiges JSON gegenüber einem echten Fix
Diese Paare wurden mit JSON.parse geprüft. Bei HTML ist der Fix die Antwort, keine Syntaxbearbeitung.
| Problem | Ungültig | Fix |
|---|---|---|
| Einfache Anführungszeichen | {'a':1} |
{"a":1} |
| Trailing Comma | {"a":1,} |
{"a":1} |
| Key ohne Quotes | {a:1} |
{"a":1} |
| undefined | {"a":undefined} |
{"a":null} |
| HTML-Body | <html>... |
Endpoint und Rohantwort prüfen. HTML nicht zu JSON umschreiben. |
Ein einfacher Entscheidungsleitfaden für Unexpected token
Wenn JSON.parse gescheitert ist, klären, ob überhaupt JSON vorliegt, bevor Quotes umgeschrieben werden.
- JSON.parse ist gescheitert
- Von einer API? Status, Content-Type und den Roh-Body prüfen
- Beginnt es wie JSON? Wenn nicht, Quelle oder Endpoint korrigieren
- Wenn ja, Quotes, Kommas, Klammern, Escapes, nicht unterstützte Werte prüfen
- Die gemeldete Position als Hinweis nutzen
- Die Quelle korrigieren, dann erneut parsen
JSON prüfen, bevor es geparst oder genutzt wird
NEXNARA JSON formatieren und vergleichen prüft JSON im Browser mit JSON.parse—nicht eval.
Validieren, mit 2 Leerzeichen, 4 Leerzeichen oder Tabs formatieren, minifizieren, kopieren, herunterladen und .json hochladen. JSON Diff umfasst verschachtelte Objekte und Arrays, Pfade, Zusammenfassung, Filter und Tausch. Nach dem Parsen vergleichen formatierte und minifizierte Kopien derselben Daten als gleich; Objektkeys werden nach Namen verglichen.
Text über 5 MB kann sich langsam anfühlen. Text über 15 MB wird im Browser nicht verarbeitet.
JSON-Validierung und -Formatierung laufen in Ihrem Browser. Dieses Tool sendet das JSON nicht an einen NEXNARA-Server. Werbung und andere Site-Funktionen nutzen weiter das Netz.
Den scheiternden String in JSON formatieren und vergleichen einfügen und die ersten Zeichen lesen, bevor Quotes umgeschrieben werden.
FAQ
Warum sagt JSON.parse Unexpected token?
Der Text ist an der Stelle, an der der Parser stoppte, kein gültiges JSON. Typisch: Quotes, Kommas, Extra-Text oder ein Nicht-JSON-Body wie HTML.
Was bedeutet Unexpected token < in JSON?
Das erste illegale Zeichen kann < sein. Das deutet oft auf eine HTML-Seite, ist aber kein Beweis für einen 404 oder für HTML in jedem Fall. Status, Content-Type und den Roh-Body prüfen.
Wie finde ich die Fehlerposition in JSON?
Wenn die Engine Position, Zeile oder Spalte meldet, in der Nähe schauen. Der echte Fehler kann früher liegen. Als Hinweis nutzen, dann validieren.
Darf JSON einfache Anführungszeichen nutzen?
Nein. In Standard-JSON nutzen Strings und Membernamen doppelte Anführungszeichen.
Darf JSON Trailing Commas haben?
Nein. Standard-JSON erlaubt kein Komma nach der letzten Eigenschaft oder dem letzten Array-Element.
Wie prüfe ich, ob ein String gültiges JSON ist?
JSON.parse in einem try/catch aufrufen oder den Text in JSON formatieren und vergleichen einfügen. Wirft das Parsen SyntaxError, ist der String kein gültiges JSON.