Las líneas del código fuente y las del valor son distintas

En una cadena JSON, una barra inversa seguida de n representa un salto. Dos barras hacen que el valor conserve una barra y n como dos caracteres. Ambos ejemplos son válidos, pero los valores text analizados tienen longitudes de 3 y 4.

{"text":"A\nB"}
{"text":"A\\nB"}

JSON.parse('{"text":"A\\nB"}').text.length // 3
JSON.parse('{"text":"A\\\\nB"}').text.length // 4
Diagrama de un carácter LF frente a una barra inversa y n entre A y B
Diagrama propio basado en entradas ejecutadas. Los números son el length de JavaScript del valor text analizado, no los bytes del archivo JSON.

Un salto real dentro de una cadena produce un error

RFC 8259 exige escapar los caracteres de control U+0000 a U+001F dentro de cadenas, incluido LF literal. Entre tokens se permiten LF, CR, tabulaciones y espacios. En estas pruebas se rechazó LF literal dentro de la cadena, pero se aceptó un objeto en varias líneas.

const invalid = '{"text":"A' + '\n' + 'B"}';
formatJSON(invalid); // throws

formatJSON('{\n"text":"AB"\n}'); // accepted

RFC 8259 §7: Strings · RFC 8259 §2: JSON Grammar

Distingue el formato del código de la interpretación del valor

Moyoutil conserva los tokens de las cadenas y cambia la sangría exterior. No convierte \n en un salto visible dentro del valor. La minificación también conserva los escapes. Si falla, revisa comillas y barras cerca de la posición indicada. Añadir barras a toda la entrada puede alterar valores correctos.

Ejecuta el formato y la validación con los ejemplos y compara la versión minificada. Si el valor necesita un salto, serializa la cadena con JSON.stringify al generar JSON y verifica el valor con JSON.parse. Validar la sintaxis no valida los campos obligatorios del esquema de una API.

Preguntas frecuentes

¿Minificar JSON elimina los saltos en los valores?

No. Reduce espacios fuera de las cadenas. Esta herramienta conserva los escapes de las cadenas y los saltos de los valores analizados.