Unexpected end of JSON input
Il parser è arrivato alla fine dell’input mentre se ne aspettava ancora. O la stringa era vuota fin dall’inizio, oppure un valore è rimasto aperto e il documento era troncato. Nota che questo messaggio non porta alcuna posizione, ed è proprio ciò che lo distingue dagli errori che invece ce l’hanno.
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 La stringa è vuota
JSON.parse("") solleva subito questo errore. Una stringa vuota non è JSON valido. Di solito arriva da un HTTP 204, da una risposta senza corpo, o da una chiave di localStorage scritta come stringa vuota.
Si rompe
JSON.parse(localStorage.getItem('draft'))Funziona
const raw = localStorage.getItem('draft'); const draft = raw ? JSON.parse(raw) : null; -
02 Il corpo della risposta era già stato consumato
Il corpo di un Response può essere letto una sola volta. Chiamare res.text() e poi res.json() sulla stessa risposta ti dà una stringa vuota la seconda volta.
Si rompe
const text = await res.text(); const data = await res.json(); // body already usedFunziona
const text = await res.text(); const data = text ? JSON.parse(text) : null; -
03 Il documento è troncato
Una connessione caduta, un limite di dimensione del corpo (Express è a 100 kB di default), una lettura di stream finita troppo presto, o un file scritto mentre veniva letto. Se l’input finisce a metà di un oggetto, il nostro validatore indica ogni parentesi rimasta aperta e dove ciascuna è iniziata.
Si rompe
{"users": [{"id": 1}, {"id":Funziona
{"users": [{"id": 1}, {"id": 2}]} -
04 La cache di npm o di yarn è corrotta
Buona parte delle ricerche su questa stringa riguarda npm e non il codice applicativo. Un file di cache scritto a metà produce lo stesso errore durante l’installazione. Esegui npm cache clean --force, cancella node_modules e package-lock.json, e reinstalla.
-
05 Hai analizzato il risultato di una funzione che non ha restituito nulla
JSON.parse(undefined) dà un messaggio diverso ("undefined" is not valid JSON), ma una funzione che restituisce una stringa vuota anziché undefined finisce qui.
Lo stesso errore in altri runtime
Il problema di fondo è identico; cambia solo la formulazione. Se un collega segnala uno di questi messaggi, sta guardando esattamente la stessa cosa che vedi tu.
| Python | Expecting value: line 1 column 1 (char 0) |
|---|---|
| Python, truncated object | Expecting ',' delimiter: line 1 column 28 (char 27) |
Domande frequenti
- Perché in questo messaggio non ci sono riga e colonna?
- Perché non c’è una posizione da indicare. Il guasto è che l’input è finito, quindi il punto incriminato è la fine del documento. Il nostro validatore lo segnala come fine dell’input ed elenca quali parentesi erano ancora aperte.
- JSON.parse(null) solleva questo errore?
- No. JSON.parse(null) converte null nella stringa "null" e restituisce null, cosa che sorprende. È la stringa vuota a sollevare l’errore.
Risolvilo adesso
Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.
Trova la parentesi non chiusa