Vai al contenuto
jsonbeautifiers
Italiano
V8 Verificato eseguendo il parser su Node v24.15.0, V8 13.6.233.17.

"[object Object]" is not valid JSON

JSON.parse si aspetta una stringa. Quando gli passi un oggetto, JavaScript converte prima quell’oggetto in stringa, e la conversione predefinita produce il testo letterale "[object Object]". Il parser fallisce poi sulla lettera o in posizione 1. I dati stanno bene; è la chiamata a parse a non doverci essere.

Potresti vederlo scritto anche così

  • Unexpected token o in JSON at position 1

V8 ha riscritto quasi tutti i suoi messaggi di errore JSON nel 2022. La formulazione più vecchia resta quella che mostrano quasi tutti i risultati di ricerca, ma nessun runtime attuale la emette.

Incolla il tuo JSON e vedi esattamente dove si rompe

Input

Nulla di ciò che incolli lascia il tuo browser. L’allowlist connect-src ne fa una garanzia del browser anziché una promessa. Verificalo tu stesso

Che cosa lo provoca davvero

In ordine di quanto spesso ciascuno si rivela essere la risposta.

  1. 01 Il valore era già stato analizzato

    axios, jQuery.ajax e molti client di API analizzano il JSON al posto tuo quando il Content-Type lo dichiara. Rianalizzare il risultato è ciò che scatena questo errore.

    Si rompe

    const res = await axios.get('/api/user');
    const user = JSON.parse(res.data);   // res.data is already an object

    Funziona

    const res = await axios.get('/api/user');
    const user = res.data;
  2. 02 Un oggetto è stato salvato senza stringify

    localStorage e sessionStorage salvano stringhe. Passare loro un oggetto chiama String(obj), che scrive il testo letterale "[object Object]". A quel punto i dati sono persi, non semplicemente illeggibili.

    Si rompe

    localStorage.setItem('user', user);
    const back = JSON.parse(localStorage.getItem('user'));

    Funziona

    localStorage.setItem('user', JSON.stringify(user));
    const back = JSON.parse(localStorage.getItem('user'));
  3. 03 Un oggetto è stato interpolato in un template literal

    Costruire un corpo di richiesta con `{"user": ${user}}` inserisce "[object Object]" anziché l’oggetto. Costruisci invece l’oggetto e serializza il tutto.

    Si rompe

    body: `{"user": ${user}}`

    Funziona

    body: JSON.stringify({ user })

Domande frequenti

Che fine ha fatto «Unexpected token o in JSON at position 1»?
Era la formulazione di V8 precedente al 2022 per lo stesso errore. La o era il secondo carattere della stringa "[object Object]". Il messaggio moderno cita invece il testo incriminato, il che è molto più utile.
Come lo rendo difensivo?
typeof value === "string" ? JSON.parse(value) : value. È una guardia ragionevole su un confine che non controlli, anche se dentro il tuo codice è meglio sapere quale dei due hai.

Risolvilo adesso

Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.

Ispeziona un payload