← Tutti gli articoli

Stringa non terminata in JSON: cause e correzioni

Una stringa non terminata in JSON significa che un apice di apertura non ha quello di chiusura — di solito un apice non escapato, un newline grezzo o dati troncati. Esempi rotti e corretti.

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?

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 string

La 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 string

Come correggere —— passo a passo

  1. Salta alla posizione segnalata e trova la " di apertura senza la corrispondente di chiusura.
  2. Cerca una " non escapata dentro il valore —— escapala in \".
  3. Cerca un a-capo/tab grezzo nel valore —— sostituiscilo con \n / \t.
  4. Controlla il troncamento —— confronta la lunghezza in byte con Content-Length; se è corta, i dati sono stati tagliati (correzione di codice, non di testo).
  5. 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 valido

Domande 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