Zum Inhalt springen
jsonbeautifiers
Deutsch
V8 Überprüft durch Ausführen des Parsers auf Node v24.15.0, V8 13.6.233.17.

"[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

Eingabe

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.

  1. 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 object

    Funktioniert

    const res = await axios.get('/api/user');
    const user = res.data;
  2. 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'));
  3. 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