Saltar al contenido
jsonbeautifiers
Español

Escapar JSON

Convierte cualquier texto en una cadena segura para incrustar dentro de JSON.

Texto
Escapado

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

Convierte texto arbitrario en algo que se puede meter con seguridad dentro de una cadena JSON. Las comillas, las barras invertidas, los saltos de línea, los tabuladores y los caracteres de control se escapan; todo lo demás se deja tal cual.

Es la operación que necesitas cuando incrustas a mano un payload, una línea de log, una consulta SQL o un fragmento de HTML dentro de un campo JSON.

Qué hay que escapar y qué no

JSON define exactamente nueve secuencias de escape, y exige escapar exactamente en tres situaciones.

La comilla doble
Pasa a ser \". Si no, terminaría la cadena.
La barra invertida
Pasa a ser \\. Si no, iniciaría un escape.
Los caracteres de control, de U+0000 a U+001F
Un salto de línea pasa a \n, un tabulador a \t, un retorno de carro a \r, un retroceso a \b, un salto de página a \f. Cualquier otro de ese rango toma la forma \uXXXX.
La barra normal
Puede escaparse como \/ pero no hace falta. Ambas formas significan el mismo carácter. El escape existe para poder incrustar JSON dentro de un elemento script de HTML, donde la secuencia </ lo terminaría.
Los caracteres no ASCII
No necesitan ningún escape. JSON es UTF-8 y é, 你 y 🎉 son todos legales literalmente. Escaparlos es una opción aquí, para sistemas que estropean lo no ASCII en tránsito.
La comilla simple
No necesita nada. Dentro de una cadena con comillas dobles es un carácter corriente, y \' no es un escape JSON válido.

Sustitutos y emojis

Un carácter fuera del Plano Multilingüe Básico, lo que incluye todos los emojis, se almacena como dos unidades de código UTF-16. Escaparlo produce dos secuencias \u, como \ud83c\udf89 para un matasuegras. Eso es correcto y cualquier parser reconstruye el carácter.

Un sustituto suelto, la mitad de una de esas parejas sin su compañera, se escapa siempre aquí aunque no se escape nada más, porque emitirlo literalmente produce texto que no es Unicode bien formado y se corrompe al recodificarlo a UTF-8.

La mejor respuesta, casi siempre

Si estás escapando a mano para construir JSON, para y serializa en su lugar. JSON.stringify, json.dumps y sus equivalentes escapan cada valor correctamente por construcción, y no se les puede olvidar ninguno.

El JSON construido a mano es la causa raíz de casi todos los errores de carácter de control inválido y de cadena sin terminar que existen.

How to do this in code

Escapar en código.

js JavaScript
// Escaped and quoted
const quoted = JSON.stringify(text);

// Escaped without the surrounding quotes
const escaped = JSON.stringify(text).slice(1, -1);
py Python
import json

quoted = json.dumps(text)                      # with quotes, non-ASCII escaped
quoted = json.dumps(text, ensure_ascii=False)  # with quotes, é stays é
escaped = json.dumps(text)[1:-1]
sh Shell
# jq's @json filter escapes and quotes
printf '%s' "$text" | jq -Rs @json

# -R reads raw input, -s slurps it into one string
go Go
b, _ := json.Marshal(text)   // includes the quotes

// Marshal escapes <, > and & by default for HTML safety.
// To turn that off you need an Encoder:
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false)
enc.Encode(text)

Preguntas frecuentes

¿Tengo que escapar las comillas simples?
No. Dentro de una cadena JSON con comillas dobles, un apóstrofo es un carácter corriente, y \' no es siquiera un escape JSON válido. Sí lo es en JavaScript y en JSON5, que es de donde viene la costumbre.
¿Debería escapar los caracteres no ASCII?
Normalmente no. JSON es UTF-8 y los caracteres acentuados, el CJK y los emojis son todos legales literalmente. Escápalos solo cuando algo del pipeline estropee lo no ASCII, que es un motivo para arreglar el pipeline.
¿Y una ruta de Windows?
Cada barra invertida se duplica: C:\\Users\\priya. Una ruta que termina en una sola barra invertida es peor que incorrecta, porque escapa la comilla de cierre y se traga el resto de tu documento.