← Todos los artículos

Carácter mal escapado en JSON: escapes válidos y arreglos

Un carácter mal escapado en JSON significa que tras una barra invertida viene algo que JSON no permite. Mira la lista completa de escapes válidos y arreglos para \x, rutas y \u.

SyntaxError: Bad escaped character in JSON at position N significa que dentro de una cadena hay una barra invertida (\) seguida de algo que JSON no reconoce como escape válido. JSON solo admite un conjunto pequeño y fijo de secuencias de escape —— cualquier otra cosa tras una \ dispara este error. Aquí está la lista completa y cómo arreglarlo.

¿Qué error de cadena estoy viendo?

Cómo se ve el error

// V8 (Chrome / Node / Edge)
SyntaxError: Bad escaped character in JSON at position 14

// Firefox
SyntaxError: JSON.parse: bad escaped character at line 1 column 15 of the JSON data

// Safari
SyntaxError: JSON Parse error: Invalid escape character \x

Los únicos escapes que JSON admite

Dentro de una cadena JSON, una barra invertida solo puede ir seguida de uno de estos:

\"   comillas dobles
\\   barra invertida
\/   barra normal
\b   backspace
\f   form feed
\n   nueva línea
\r   retorno de carro
\t   tabulador
\uXXXX   un punto de código Unicode (exactamente 4 dígitos hex)

Cualquier otra cosa tras una \ —— \x, \', \a, \0, una ruta de Windows como \Users o un \u12 malformado —— cuenta como «bad escaped character».

Por qué ocurre

Causa 1 —— Tomar prestados escapes de otros lenguajes

// ❌ \x y \' son válidos en JS/Python, no en JSON
{ "code": "\x1b[0m", "name": "O\'Brien" }

// ✅ usa un escape \u para ese byte y no escapes los apóstrofos
{ "code": "\u001b[0m", "name": "O'Brien" }

Causa 2 —— Rutas de archivo Windows

// ❌ cada barra invertida abre un escape inválido
{ "path": "C:\Users\Ada\file.json" }

// ✅ escapa cada barra (o usa barras normales)
{ "path": "C:\\Users\\Ada\\file.json" }
{ "path": "C:/Users/Ada/file.json" }

Causa 3 —— Escape \u truncado o malformado

// ❌ \u necesita exactamente 4 dígitos hex
{ "char": "\u12" }

// ✅
{ "char": "\u0012" }

Pares subrogados y caracteres fuera del BMP

El escape \uXXXX de JSON tiene 4 dígitos hex fijos, que direccionan puntos de código hasta U+FFFF (el Plano Multilingüe Básico). Los caracteres por encima de eso —— emojis, muchas extensiones CJK, símbolos matemáticos —— deben escribirse como par subrogado UTF-16:

// 😀 (U+1F600) como par subrogado
"\uD83D\uDE00"

// no permitido —— JSON no tiene \U ni \u{...}
"\u1F600"     // escape malo (solo consume 4 dígitos hex; el resto es texto)
"\u{1F600}"   // escape malo

Esta es la codificación de JSON en forma UTF-16, aunque el fichero en disco sea UTF-8. Dos consecuencias prácticas:

  • UTF-8 en el fichero está bien. Puedes escribir "😀" literalmente; los parsers modernos lo manejan. La forma de par subrogado solo hace falta cuando debes escapar.
  • Cuidado con los subrogados sueltos. Un \uD83D sin su subrogado bajo emparejado, o al revés, técnicamente lo permite JSON pero es UTF-16 malformado —— los consumidores de aguas abajo (especialmente jsonb de Postgres) lo rechazarán. JSON.stringify solo produce pares bien formados.

Cómo arreglarlo —— paso a paso

  1. Salta a la posición reportada y encuentra la \ que precede a un carácter inválido.
  2. ¿Es una barra invertida suelta? (p. ej. una ruta Windows) —— dóblala a \\ o cambia a barras normales.
  3. ¿Es un escape ajeno como \x o \'? —— convierte \xNN a \u00NN y quita la barra invertida antes de '.
  4. ¿Es un \u corto? —— rellénalo a exactamente cuatro dígitos hex.
  5. Mejor arreglo: construye el JSON con JSON.stringify(), que solo produce escapes válidos.
// Prevención —— el escape correcto es automático
JSON.stringify({ path: 'C:\\Users\\Ada', code: '\x1b[0m' });
// → {"path":"C:\\Users\\Ada","code":"\u001b[0m"}

Preguntas frecuentes

¿Qué significa «Bad escaped character in JSON»?

Una barra invertida dentro de una cadena va seguida de un carácter que no está entre los escapes permitidos por JSON (" \\ / b f n r t o \uXXXX). Los culpables más comunes son \x, \' y rutas de Windows sin escapar.

¿Cómo pongo una ruta de Windows en JSON?

Dobla cada barra invertida (C:\\\\Users) para que cada una sea un escape \\ válido, o usa barras normales (C:/Users), que JSON acepta.

¿Es lo mismo que «Bad control character»?

No. «Bad escaped character» trata sobre una secuencia inválida tras una barra invertida; «bad control character» trata sobre un byte de control crudo y sin escapar (tab, salto de línea) sin ninguna barra invertida.

Arréglalo ahora