Illegal unquoted character ((CTRL-CHAR, code 10))
Una cadena del documento contiene un carácter de control literal. El código 10 es un salto de línea, el 13 un retorno de carro y el 9 un tabulador. JSON exige que vayan escapados, y Jackson hace bien en rechazarlos. Es el mismo problema de fondo que V8 llama «bad control character».
Pega tu JSON y ve exactamente dónde se rompe
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.
-
01 Texto multilínea incrustado en una cadena
El SQL, las trazas de pila, las líneas de log y el contenido de plantillas llevan saltos de línea reales.
Falla
{ "query": "SELECT * FROM users" }Funciona
{ "query": "SELECT *\nFROM users" } -
02 JSON construido por concatenación
Los valores interpolados no se escapan. Serializa con ObjectMapper.writeValueAsString en vez de ensamblar el texto a mano.
Falla
String body = "{\"note\": \"" + note + "\"}";Funciona
String body = mapper.writeValueAsString(Map.of("note", note)); -
03 Finales de línea de Windows dentro de un valor
El retorno de carro, código 13, es un carácter de control aparte y necesita \r.
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ú.
| JavaScript (V8) | Bad control character in string literal in JSON at position 11 (line 1 column 12) |
|---|---|
| Python | Invalid control character at: line 1 column 8 (char 7) |
Preguntas frecuentes
- ¿Y ALLOW_UNESCAPED_CONTROL_CHARS?
- JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS hace que Jackson los acepte, y es un parche razonable cuando no puedes cambiar al productor. No convierte el documento en JSON válido, así que cualquier otra cosa que lo consuma seguirá fallando.
Arréglalo ahora
Pega el payload en la herramienta de arriba, o ve directamente a la creada para este trabajo.
Escapar el valor