"[object Object]" is not valid JSON
JSON.parse erwartet eine Zeichenkette. Wenn Sie ihm ein Objekt übergeben, wandelt JavaScript dieses Objekt zuerst in eine Zeichenkette um, und die Standardumwandlung erzeugt den wörtlichen Text "[object Object]". Der Parser scheitert dann am Buchstaben o an Position 1. Mit den Daten ist alles in Ordnung; der parse-Aufruf gehört dort nicht hin.
Sie sehen das vielleicht auch so geschrieben
- Unexpected token o in JSON at position 1
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 Der Wert war bereits geparst
axios, jQuery.ajax und viele API-Clients parsen das JSON für Sie, wenn der Content-Type das sagt. Das Ergebnis noch einmal zu parsen löst genau das hier aus.
Geht kaputt
const res = await axios.get('/api/user'); const user = JSON.parse(res.data); // res.data is already an objectFunktioniert
const res = await axios.get('/api/user'); const user = res.data; -
02 Ein Objekt wurde ohne stringify gespeichert
localStorage und sessionStorage speichern Zeichenketten. Ihnen ein Objekt zu übergeben ruft String(obj) auf, was den wörtlichen Text "[object Object]" schreibt. Die Daten sind zu diesem Zeitpunkt weg, nicht bloß unlesbar.
Geht kaputt
localStorage.setItem('user', user); const back = JSON.parse(localStorage.getItem('user'));Funktioniert
localStorage.setItem('user', JSON.stringify(user)); const back = JSON.parse(localStorage.getItem('user')); -
03 Ein Objekt wurde in ein Template-Literal interpoliert
Einen Anfragekörper mit `{"user": ${user}}` zu bauen fügt "[object Object]" ein statt des Objekts. Bauen Sie stattdessen das Objekt und serialisieren Sie das Ganze.
Geht kaputt
body: `{"user": ${user}}`Funktioniert
body: JSON.stringify({ user })
Häufige Fragen
- Was ist aus „Unexpected token o in JSON at position 1“ geworden?
- Das war der V8-Wortlaut vor 2022 für denselben Fehler. Das o war das zweite Zeichen der Zeichenkette "[object Object]". Die heutige Meldung zitiert stattdessen den störenden Text, was weit nützlicher ist.
- Wie mache ich das defensiv?
- typeof value === "string" ? JSON.parse(value) : value. Das ist eine vernünftige Absicherung an einer Grenze, die Sie nicht kontrollieren; innerhalb Ihres eigenen Codes ist es allerdings besser zu wissen, was von beidem Sie haben.
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 untersuchen