SyntaxError: Unterminated string in JSON at position N significa que o parser começou a ler uma string (viu um " de abertura) e chegou ao fim da entrada —— ou a uma quebra de linha —— antes de encontrar o " de fechamento. A string nunca foi fechada. Aqui estão as causas e como corrigir.
Qual erro de string estou vendo?
- Unterminated string —— uma string foi aberta com
"mas nunca foi fechada. - Bad control character —— um tab/quebra de linha/byte nulo bruto aparece dentro de uma string sem escape.
- Bad escaped character —— uma
\é seguida por algo que o JSON não permite (ex.:\x, caminhos Windows).
Como o erro aparece
// 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 stringA posição aponta para (ou logo depois da) aspa de abertura da string que nunca fechou —— siga em frente a partir dali.
Por que acontece
Causa 1 —— Uma aspa não escapada fecha a string antes
Uma " literal dentro do valor fecha a string mais cedo; o resto da linha é lido como tokens inesperados, e a string de verdade fica „aberta“.
// ❌ quebrado —— a aspa antes de hello fecha "He said "
{ "note": "He said "hello" to her" }
// ✅ corrigido —— escape as aspas internas com barra invertida
{ "note": "He said \"hello\" to her" }Causa 2 —— Uma quebra de linha bruta dentro da string
Strings JSON não podem atravessar quebras de linha brutas. Uma quebra literal termina a string e a deixa aberta.
// ❌ quebrado —— quebra de linha real dentro da string
{ "bio": "line one
line two" }
// ✅ corrigido —— use o escape \n, sem quebra bruta
{ "bio": "line one\nline two" }Causa 3 —— Dados truncados
Uma resposta cortada no meio da string (conexão perdida, limite de buffer/tamanho, leitura parcial) deixa uma string aberta no fim da entrada.
// o que chegou (conexão caiu):
{"user":{"name":"Ada Lovel
// → Unterminated stringComo corrigir —— passo a passo
- Pule para a posição reportada e encontre a
"de abertura sem fechamento correspondente. - Procure uma
"não escapada dentro do valor —— escape-a como\". - Procure quebra de linha/tab bruta dentro do valor —— substitua por
\n/\t. - Verifique truncamento —— compare o tamanho em bytes com
Content-Length; se for menor, os dados foram cortados (correção de código, não de texto). - Pare de montar JSON na mão. Use
JSON.stringify(), que escapa aspas e caracteres de controle para você.
// Prevenção: nunca concatene strings para fazer JSON
const json = JSON.stringify({ note: userInput }); // sempre válidoPerguntas frequentes
O que causa „Unterminated string in JSON“?
Uma " de abertura sem " de fechamento correspondente —— geralmente uma aspa não escapada dentro do valor, uma quebra de linha bruta, ou uma resposta truncada no meio da string.
Como incluo uma aspa ou quebra de linha dentro de uma string JSON?
Escape: \" para aspas duplas, \n para quebra de linha, \t para tab. Construir o JSON com JSON.stringify() faz isso automaticamente.
É o mesmo que „Unexpected end of JSON input“?
Relacionado, mas diferente. „Unterminated string“ significa que uma string está aberta; „Unexpected end of JSON input“ significa que a estrutura inteira (objeto/array) terminou cedo. Respostas truncadas podem disparar qualquer um dos dois.
Corrija agora
- JSON Fix —— encontre a string não terminada e repare no seu navegador
- Unexpected End of JSON Input —— quando a estrutura inteira é cortada
- Bad Control Character em literal de string em JSON —— tabs/quebras de linha brutos em strings
- Bad Escaped Character em JSON —— escapes de barra invertida inválidos