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