Escapar / desescapar cadenas JSON
Escapa texto para que sea válido dentro de una cadena JSON, o descodifica texto escapado a lo que realmente dice — con posiciones de error exactas.
La salida aparecerá aquí
Qué hace esta herramienta
Una cadena JSON no puede contener una comilla doble sin escapar, una barra invertida sin escapar ni un salto de línea literal: el formato necesita esos caracteres para marcar dónde empiezan y terminan las cadenas. Por eso se escriben como secuencias de escape, y esta herramienta convierte entre ambas formas. Pega texto normal y obtén la versión escapada, lista para insertar en JSON; cambia de dirección y el texto escapado vuelve a ser legible.
La segunda dirección es la que suele traer aquí a la gente: una línea de registro, un mensaje de error o una respuesta de curl que llegó como un muro de barras invertidas. Todo se ejecuta en tu navegador, lo que importa cuando lo que intentas leer es una respuesta de producción.
Las secuencias de escape
JSON define una lista corta de escapes, y la herramienta usa exactamente esa lista — nada más exótico, porque cualquier otra cosa no es JSON válido.
- \" — una comilla doble, que de otro modo terminaría la cadena.
- \\ — una sola barra invertida. Por eso las rutas de Windows y los patrones de expresiones regulares se duplican.
- \n y \r — salto de línea y retorno de carro.
- \t — tabulador. También existen \b y \f, para retroceso y avance de página.
- \/ — un escape opcional para la barra inclinada. Válido, nunca obligatorio; esta herramienta lo acepta y nunca lo produce.
- \uXXXX — cualquier carácter por su código hexadecimal, que es como se pueden escribir los caracteres de control y todo lo que esté fuera de ASCII.
Los caracteres de control —todo lo que esté por debajo del código 32— no tienen forma literal dentro de una cadena JSON, así que siempre salen como escapes \uXXXX aunque no hayas pedido salida ASCII.
Por qué se multiplican las barras invertidas
El motivo más común para recurrir a una herramienta así es el texto que ha sido escapado más de una vez. Cada ronda de codificación escapa las barras invertidas que introdujo la anterior, así que una sola comilla acaba con una cola cada vez más larga:
original He said "hi" escaped He said \"hi\" escaped x2 He said \\\"hi\\\"
Esto ocurre cuando un valor se serializa a JSON, ese JSON se guarda como cadena dentro de otro documento JSON y el resultado se registra. Descodificar una vez deshace una capa; vuelve a ejecutarlo sobre el resultado hasta que el texto se lea con normalidad. Si descodificas y la salida aún tiene barras sueltas, es una capa extra real, no un fallo de la conversión.
Comillas: valor o fragmento
Un valor de cadena JSON completo incluye las comillas dobles envolventes. Pero la mayoría de las veces estás pegando dentro de una cadena que ya existe en tu código o configuración, donde esas comillas estarían de más. Por eso al escapar se produce por defecto solo el contenido escapado, y la opción «incluir comillas envolventes» las añade cuando quieres un valor que puedas pegar entero.
Al descodificar no hace falta esa elección: acepta ambas formas. Pega un fragmento o pega un valor entrecomillado completo sacado directamente de un documento JSON, y las comillas envolventes se reconocen y se retiran.
Unicode, y cuándo sí escaparlo
JSON es un formato Unicode. "שלום" y "😀" son cadenas JSON perfectamente válidas tal como están escritas, y dejarlas legibles es el comportamiento por defecto aquí. La opción \uXXXX existe para los sistemas que no se han puesto al día: canalizaciones de registros antiguas, terminales y analizadores que asumen ASCII y estropean cualquier otra cosa.
Un detalle importa cuando esa opción está activa. Los caracteres fuera del rango básico —la mayoría de los emoji— se almacenan internamente como dos unidades llamadas par sustituto, y el formato exige que ambas mitades se escriban como escapes separados. Un emoji se convierte por tanto en dos escapes \u y no en uno más largo. Las herramientas que se equivocan aquí producen escapes que ningún analizador acepta, que es la explicación habitual de los emoji que sobreviven a un sistema y se rompen en el siguiente.
Cuando la descodificación falla
No toda secuencia con barra invertida es un escape válido. \q no significa nada en JSON, y \u12 es un escape \u al que le falta la mitad de sus dígitos. En lugar de dejarlos pasar sin cambios y devolver una salida que parece correcta pero no es lo que decían tus datos, la herramienta se detiene e informa de la línea y columna exactas donde empieza la secuencia defectuosa.
En la práctica ese error es informativo: un \q suelto suele significar que el texto nunca estuvo escapado para JSON, y un \u truncado suele significar que la entrada se cortó — una línea de registro recortada por un límite de longitud, o una copia que se detuvo a mitad de la secuencia.
Preguntas frecuentes
- ¿Por qué mi texto tiene \\" por todas partes?
- Fue escapado más de una vez. Cada pasada escapa las barras invertidas de la anterior, así que una comilla original puede acabar precedida por varias. Descodifica repetidamente —cada ejecución elimina exactamente una capa— hasta que el texto se lea con normalidad.
- ¿Debo activar las comillas envolventes?
- Solo si quieres un valor JSON completo para pegar tal cual, por ejemplo como todo el lado derecho de una clave. Si estás pegando dentro de una cadena que ya existe en tu código, déjalo desactivado; de lo contrario acabarás con comillas dentro de comillas.
- ¿Hay que escapar hebreo, árabe, chino o emoji?
- No. Las cadenas JSON son Unicode, así que esos caracteres son válidos tal cual y siguen legibles por defecto. Activa la opción \uXXXX solo cuando un sistema posterior insista en ASCII puro; los emoji se escriben entonces como sus dos escapes sustitutos obligatorios.
- ¿Qué significa «secuencia de escape no válida»?
- La entrada contiene una barra invertida seguida de algo que JSON no define, como \q, o un \u sin cuatro dígitos hexadecimales detrás. Se informa de la posición para que puedas mirar ese punto: normalmente el texto no estaba escapado para JSON, o quedó truncado a mitad.
- ¿Se envía mi texto a alguna parte?
- No. Tanto el escapado como la descodificación se ejecutan por completo en tu navegador, así que los tokens, las cargas útiles y las líneas de registro nunca salen de tu dispositivo.