"undefined" is not valid JSON
Hai passato undefined a JSON.parse. Viene convertito nella stringa "undefined", e JSON non ha quel literal, quindi fallisce in posizione 0. La vera domanda è da dove sia arrivato quell’undefined, e le risposte sono all’incirca tre.
Potresti vederlo scritto anche così
- Unexpected token u in JSON at position 0
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 Una chiave di storage mai impostata
localStorage.getItem restituisce null per una chiave mancante, e JSON.parse(null) in effetti funziona. Ma se in quella chiave è mai stata scritta la stringa "undefined", rileggerla produce esattamente questo errore, in modo permanente, finché la chiave non viene ripulita.
Si rompe
localStorage.setItem('token', someUndefinedValue); // writes "undefined" JSON.parse(localStorage.getItem('token'));Funziona
const raw = localStorage.getItem('token'); const token = raw && raw !== 'undefined' ? JSON.parse(raw) : null; -
02 Un valore asincrono non atteso
Leggere una proprietà da una promise, o da uno stato non ancora caricato, dà undefined. L’analisi viene eseguita prima che i dati arrivino.
Si rompe
const data = JSON.parse(fetchUser().body);Funziona
const res = await fetchUser(); const data = JSON.parse(await res.text()); -
03 Una proprietà che non esiste
Un campo rinominato, un refuso, o un’API che ha cambiato forma. obj.data quando il payload usa obj.result dà undefined senza nessun altro avviso.
Domande frequenti
- Perché JSON.parse(null) funziona e JSON.parse(undefined) no?
- Entrambi vengono prima convertiti in stringhe. null diventa "null", che è un documento JSON valido, quindi viene analizzato e restituisce null. undefined diventa "undefined", e JSON non ha alcun literal corrispondente.
- Come ripulisco una chiave che contiene la stringa "undefined"?
- localStorage.removeItem(chiave), oppure proteggi la lettura come mostrato sopra. Il valore sbagliato sopravvive ai ricaricamenti, ed è per questo che questo errore sembra spesso intermittente tra una macchina e l’altra.
Risolvilo adesso
Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.
Valida un payload