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?
- Bad escaped character —— una
\va seguida de algo que JSON no permite (p. ej.\x, rutas de Windows). - Bad control character —— un tab/salto de línea/byte nulo crudo aparece dentro de una cadena sin escapar.
- Unterminated string —— una cadena se abrió con
"pero nunca se cerró.
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 \xLos ú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 maloEsta 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
\uD83Dsin su subrogado bajo emparejado, o al revés, técnicamente lo permite JSON pero es UTF-16 malformado —— los consumidores de aguas abajo (especialmentejsonbde Postgres) lo rechazarán.JSON.stringifysolo produce pares bien formados.
Cómo arreglarlo —— paso a paso
- Salta a la posición reportada y encuentra la
\que precede a un carácter inválido. - ¿Es una barra invertida suelta? (p. ej. una ruta Windows) —— dóblala a
\\o cambia a barras normales. - ¿Es un escape ajeno como
\xo\'? —— convierte\xNNa\u00NNy quita la barra invertida antes de'. - ¿Es un
\ucorto? —— rellénalo a exactamente cuatro dígitos hex. - 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
- JSON Fix —— localiza y repara escapes inválidos en tu navegador
- Bad Control Character en literal de cadena en JSON —— bytes de control crudos vs escapes
- Cadena no terminada en JSON —— cuando una cadena nunca se cierra
- Cómo arreglar los errores «Unexpected Token» de JSON.parse —— la guía de errores más amplia