Saltar al contenido
jsonbeautifiers
Español
V8 Verificado ejecutando el parser en Node v24.15.0, V8 13.6.233.17.

Bad control character in string literal in JSON at position N (line L column C)

Una cadena de tu documento contiene un carácter de control literal: casi siempre un salto de línea real, a veces un tabulador. Las cadenas JSON no pueden contener caracteres por debajo de U+0020 sin escapar. Un salto de línea hay que escribirlo como \n, y un tabulador como \t. La posición apunta al carácter problemático.

Pega tu JSON y ve exactamente dónde se rompe

Entrada

Nada de lo que pegues sale de tu navegador. La lista de permitidos de connect-src convierte eso en una garantía del navegador, no en una promesa. Compruébalo tú mismo

Qué lo provoca realmente

Ordenados por la frecuencia con la que cada uno acaba siendo la respuesta.

  1. 01 Texto multilínea pegado directamente dentro de una cadena

    SQL, HTML, un extracto de log o un mensaje de error con saltos de línea reales dentro. Para el parser, el salto de línea termina la cadena.

    Falla

    {
      "query": "SELECT *
    FROM users"
    }

    Funciona

    {
      "query": "SELECT *\nFROM users"
    }
  2. 02 JSON construido concatenando cadenas

    Esta es la causa raíz de casi todos los casos. El JSON ensamblado a mano no escapa los valores que interpolas dentro. Serializa el objeto en su lugar y el problema no puede ocurrir.

    Falla

    const body = '{"note": "' + note + '"}';

    Funciona

    const body = JSON.stringify({ note });
  3. 03 Un tabulador que llegó con un copiar y pegar

    Los tabuladores son invisibles y aterrizan en las cadenas con facilidad al copiar desde una hoja de cálculo o un terminal. Escápalos como \t, o elimínalos antes de construir el documento.

  4. 04 Finales de línea de Windows dentro de un valor

    Un retorno de carro, U+000D, también es un carácter de control. El texto leído de un archivo de Windows e incrustado en una cadena arrastra \r además de \n.

El mismo error en otros entornos

El problema de fondo es idéntico; solo cambia la redacción. Si un compañero reporta alguno de estos, está mirando exactamente lo mismo que tú.

Python Invalid control character at: line 1 column 8 (char 7)
Java (Jackson) Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value

Preguntas frecuentes

¿Qué caracteres hay que escapar?
Todo lo que va de U+0000 a U+001F, más la comilla doble y la barra invertida. JSON define escapes cortos para retroceso, salto de página, salto de línea, retorno de carro y tabulador; cualquier otro de ese rango necesita la forma \u, por ejemplo \u0000.
¿Puedo hacer que el parser los acepte?
Jackson tiene ALLOW_UNESCAPED_CONTROL_CHARS y algunos parsers tienen interruptores parecidos, pero eso esconde el problema en vez de arreglarlo, y el documento sigue siendo inválido para cualquier otro consumidor. Escapa en el punto donde se produce el JSON.

Arréglalo ahora

Pega el payload en la herramienta de arriba, o ve directamente a la creada para este trabajo.

Repararlo automáticamente