SyntaxError: Unterminated string in JSON at position N significa che il parser ha iniziato a leggere una stringa (ha visto una " di apertura) ed è arrivato alla fine dell'input —— o a un a-capo —— prima di trovare la " di chiusura. La stringa non è mai stata chiusa. Ecco le cause e come correggere.
Quale errore di stringa sto vedendo?
- Unterminated string —— una stringa è stata aperta con
"ma non chiusa. - Bad control character —— una tabulazione/un a-capo/un byte null grezzo si trova dentro una stringa senza escape.
- Bad escaped character —— una
\è seguita da qualcosa che JSON non permette (es.\x, percorsi Windows).
Com'è fatto l'errore
// V8 (Chrome / Node / Edge)
SyntaxError: Unterminated string in JSON at position 27
// Firefox
SyntaxError: JSON.parse: unterminated string at line 2 column 10 of the JSON data
// Safari
SyntaxError: JSON Parse error: Unterminated stringLa posizione punta alla (o subito dopo la) virgoletta di apertura della stringa mai chiusa —— vai avanti da lì.
Perché succede
Causa 1 —— Una virgoletta non escapata chiude la stringa in anticipo
Una " letterale dentro il valore chiude la stringa prima del tempo; il resto della riga viene letto come token inattesi e la stringa vera resta „aperta“.
// ❌ rotto —— la virgoletta prima di hello chiude "He said "
{ "note": "He said "hello" to her" }
// ✅ corretto —— escapa le virgolette interne con la barra rovesciata
{ "note": "He said \"hello\" to her" }Causa 2 —— Un a-capo grezzo dentro la stringa
Le stringhe JSON non possono attraversare a-capo grezzi. Un a-capo letterale termina la stringa e la lascia non chiusa.
// ❌ rotto —— a-capo reale dentro la stringa
{ "bio": "line one
line two" }
// ✅ corretto —— usa l'escape \n, nessun a-capo grezzo
{ "bio": "line one\nline two" }Causa 3 —— Dati troncati
Una risposta tagliata a metà stringa (connessione caduta, limite di buffer/dimensione, lettura parziale) lascia una stringa aperta alla fine dell'input.
// quello che è arrivato (connessione caduta):
{"user":{"name":"Ada Lovel
// → Unterminated stringCome correggere —— passo a passo
- Salta alla posizione segnalata e trova la
"di apertura senza la corrispondente di chiusura. - Cerca una
"non escapata dentro il valore —— escapala in\". - Cerca un a-capo/tab grezzo nel valore —— sostituiscilo con
\n/\t. - Controlla il troncamento —— confronta la lunghezza in byte con
Content-Length; se è corta, i dati sono stati tagliati (correzione di codice, non di testo). - Smetti di costruire JSON a mano. Usa
JSON.stringify(), che fa l'escape di virgolette e caratteri di controllo al posto tuo.
// Prevenzione: non concatenare mai stringhe per fare JSON
const json = JSON.stringify({ note: userInput }); // sempre validoDomande frequenti
Cosa causa „Unterminated string in JSON“?
Una " di apertura senza una " di chiusura corrispondente —— di solito una virgoletta non escapata nel valore, un a-capo grezzo, o una risposta troncata a metà stringa.
Come includo una virgoletta o un a-capo dentro una stringa JSON?
Escapa: \" per la virgoletta doppia, \n per a-capo, \t per tab. Costruire il JSON con JSON.stringify() lo fa automaticamente.
È la stessa cosa di „Unexpected end of JSON input“?
Collegati ma distinti. „Unterminated string“ significa che una stringa è aperta; „Unexpected end of JSON input“ significa che l'intera struttura (oggetto/array) è finita troppo presto. Le risposte troncate possono innescare entrambi.
Correggi ora
- JSON Fix —— trova la stringa non terminata e ripara nel browser
- Unexpected End of JSON Input —— quando l'intera struttura è tagliata
- Bad Control Character nella stringa letterale in JSON —— tab/a-capo grezzi nelle stringhe
- Bad Escaped Character in JSON —— escape con barra rovesciata non validi