← Todos os artigos

String não terminada em JSON: causas e correções

Uma string não terminada em JSON significa que uma aspa de abertura não tem aspa de fechamento — geralmente uma aspa sem escape, uma quebra de linha bruta ou dados truncados. Exemplos quebrados e corrigidos.

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?

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 string

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

Como corrigir —— passo a passo

  1. Pule para a posição reportada e encontre a " de abertura sem fechamento correspondente.
  2. Procure uma " não escapada dentro do valor —— escape-a como \".
  3. Procure quebra de linha/tab bruta dentro do valor —— substitua por \n / \t.
  4. 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).
  5. 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álido

Perguntas 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