← Todos los artículos

Cadena sin terminar en JSON: causas y arreglos

Una cadena sin terminar en JSON significa que una comilla de apertura no tiene comilla de cierre — normalmente una comilla sin escapar, un salto de línea crudo o datos truncados. Ejemplos rotos y arreglados.

SyntaxError: Unterminated string in JSON at position N significa que el parser empezó a leer una cadena (vio una " de apertura) y llegó al final de la entrada —— o a un salto de línea —— antes de encontrar la " de cierre. La cadena nunca se cerró. Aquí están las causas y cómo arreglarlo.

¿Qué error de cadena estoy viendo?

Cómo se ve el error

// 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 posición apunta a (o justo después de) la comilla de apertura de la cadena que nunca se cerró —— mira hacia delante desde ahí.

Por qué ocurre

Causa 1 —— Una comilla sin escapar cierra la cadena antes de tiempo

Una " literal dentro del valor cierra la cadena de forma prematura; el resto de la línea se lee como tokens inesperados, y la cadena de verdad queda «abierta».

// ❌ roto —— la comilla antes de hello cierra "He said "
{ "note": "He said "hello" to her" }

// ✅ arreglado —— escapa las comillas internas con barra invertida
{ "note": "He said \"hello\" to her" }

Causa 2 —— Un salto de línea crudo dentro de la cadena

Las cadenas JSON no pueden cruzar saltos de línea crudos. Un salto literal termina la cadena y la deja sin cerrar.

// ❌ roto —— salto de línea real dentro de la cadena
{ "bio": "line one
line two" }

// ✅ arreglado —— usa el escape \n, sin salto crudo
{ "bio": "line one\nline two" }

Causa 3 —— Datos truncados

Una respuesta cortada en mitad de la cadena (conexión perdida, límite de buffer/tamaño, lectura parcial) deja una cadena abierta al final de la entrada.

// lo que llegó (se cayó la conexión):
{"user":{"name":"Ada Lovel
// → Unterminated string

Cómo arreglarlo —— paso a paso

  1. Salta a la posición reportada y encuentra la " de apertura que no tiene cierre que la haga juego.
  2. Busca una " sin escapar dentro del valor —— escápala como \".
  3. Busca un salto de línea/tab crudo dentro del valor —— sustitúyelo por \n / \t.
  4. Comprueba si hay truncado —— compara la longitud en bytes con Content-Length; si es corta, los datos se cortaron (es un arreglo en el código, no en el texto).
  5. Deja de construir JSON a mano. Usa JSON.stringify(), que escapa comillas y caracteres de control por ti.
// Prevención: nunca concatenes cadenas para hacer JSON
const json = JSON.stringify({ note: userInput }); // siempre válido

Preguntas frecuentes

¿Qué causa «Unterminated string in JSON»?

Una " de apertura sin la " de cierre correspondiente —— normalmente una comilla sin escapar dentro del valor, un salto de línea crudo, o una respuesta truncada en mitad de cadena.

¿Cómo incluyo una comilla o un salto de línea dentro de una cadena JSON?

Escápalos: \" para comilla doble, \n para salto de línea, \t para tab. Construir el JSON con JSON.stringify() lo hace automáticamente.

¿Es lo mismo que «Unexpected end of JSON input»?

Relacionados pero distintos. «Unterminated string» significa que una cadena está abierta; «Unexpected end of JSON input» significa que toda la estructura (objeto/array) terminó antes. Las respuestas truncadas pueden disparar cualquiera de los dos.

Arréglalo ahora