"undefined" is not valid JSON
Sie haben undefined an JSON.parse übergeben. Es wird in die Zeichenkette "undefined" umgewandelt, und JSON kennt dieses Literal nicht, also scheitert es an Position 0. Die eigentliche Frage ist, woher das undefined kam, und darauf gibt es etwa drei Antworten.
Sie sehen das vielleicht auch so geschrieben
- Unexpected token u in JSON at position 0
V8 hat 2022 die meisten seiner JSON-Fehlermeldungen neu formuliert. Die ältere Formulierung ist noch immer das, was die meisten Suchergebnisse zeigen, aber keine aktuelle Laufzeitumgebung gibt sie aus.
Fügen Sie Ihr JSON ein und sehen Sie genau, wo es bricht
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
Was es tatsächlich auslöst
Sortiert danach, wie oft sich das jeweilige als die Antwort herausstellt.
-
01 Ein Speicherschlüssel, der nie gesetzt wurde
localStorage.getItem gibt für einen fehlenden Schlüssel null zurück, und JSON.parse(null) funktioniert sogar. Wurde in diesen Schlüssel aber jemals die Zeichenkette "undefined" geschrieben, erzeugt das Zurücklesen genau diesen Fehler - dauerhaft, bis der Schlüssel gelöscht wird.
Geht kaputt
localStorage.setItem('token', someUndefinedValue); // writes "undefined" JSON.parse(localStorage.getItem('token'));Funktioniert
const raw = localStorage.getItem('token'); const token = raw && raw !== 'undefined' ? JSON.parse(raw) : null; -
02 Ein asynchroner Wert wurde nicht abgewartet
Eine Eigenschaft von einem Promise oder von noch nicht geladenem State zu lesen ergibt undefined. Das Parsen läuft, bevor die Daten da sind.
Geht kaputt
const data = JSON.parse(fetchUser().body);Funktioniert
const res = await fetchUser(); const data = JSON.parse(await res.text()); -
03 Eine Eigenschaft, die es nicht gibt
Ein umbenanntes Feld, ein Tippfehler oder eine API, die ihre Gestalt geändert hat. obj.data, wenn das Payload obj.result verwendet, ergibt undefined ohne jede weitere Warnung.
Häufige Fragen
- Warum funktioniert JSON.parse(null), JSON.parse(undefined) aber nicht?
- Beide werden zuerst in Zeichenketten umgewandelt. Aus null wird "null", ein gültiges JSON-Dokument, das sich parsen lässt und null zurückgibt. Aus undefined wird "undefined", und dafür hat JSON kein Literal.
- Wie lösche ich einen Schlüssel, der die Zeichenkette "undefined" enthält?
- localStorage.removeItem(schlüssel), oder sichern Sie das Lesen wie oben gezeigt ab. Der schlechte Wert überlebt Neuladen, weshalb dieser Fehler zwischen verschiedenen Rechnern oft sporadisch wirkt.
Jetzt beheben
Fügen Sie das Payload in das Werkzeug oben ein, oder gehen Sie direkt zu dem, das für diesen Zweck gebaut wurde.
Ein Payload validieren