Cómo arreglar un JSON inválido: 10 errores comunes

Por • 28 Octubre, 2026 • Herramientas para desarrolladores • 12 minutos de lectura

Arregla un JSON inválido rápido: entiende los errores Unexpected token y corrige comas finales, comillas, comentarios y corchetes, paso a paso.

Para arreglar un JSON inválido, pégalo en un validador de JSON, ve a la línea que marca y mira el carácter justo antes del punto indicado. Nueve de cada diez veces el culpable es una coma final, comillas simples, una clave sin comillas, un comentario o un corchete que falta. Si el error dice Unexpected token < en la posición 0, el problema no es tu JSON: recibiste una página HTML. Esta guía recorre cada error común de JSON, qué significa realmente el mensaje y cómo corregirlo paso a paso.

Por qué JSON es tan estricto

JSON (JavaScript Object Notation) se parece a JavaScript, pero su gramática es mucho más pequeña y estricta. El estándar, RFC 8259, solo admite unas pocas piezas: objetos entre { }, arrays entre [ ], cadenas entre comillas dobles, números, true, false y null. Cualquier otra cosa, incluida la sintaxis que JavaScript o Python aceptan sin problema, invalida todo el documento.

Esa rigidez es una ventaja. Como todos los analizadores coinciden en el mismo conjunto reducido de reglas, un JSON escrito en un lenguaje se puede leer con fiabilidad en cualquier otro. La desventaja es que un solo carácter fuera de lugar lo rompe todo, y los analizadores suelen detenerse en el primer problema que encuentran.

Cómo arreglar un JSON inválido paso a paso

  1. Copia el texto exacto. Usa la entrada original, no una versión que ya hayas retocado. Si vino de una API, copia el cuerpo de la respuesta tal como llegó.
  2. Pégalo en el validador. Abre el validador y formateador de JSON, pega el texto y envíalo.
  3. Localiza la posición indicada. Anota la línea, la columna o la posición del mensaje de error.
  4. Mira un poco a la izquierda. La posición indicada es donde el analizador se rindió, que suele estar uno o dos caracteres después del error real. Una coma final, por ejemplo, normalmente se reporta en el corchete de cierre que la sigue.
  5. Corrige un error y valida de nuevo. Los analizadores solo informan del primer problema, así que repite hasta que la entrada pase.
  6. Formatea el resultado. Cuando ya sea válido, la versión formateada y con sangría facilita mucho confirmar que la estructura es la que esperabas.

Los 10 errores de JSON más comunes y cómo corregirlos

1. Comas finales

Una coma después del último elemento de un objeto o array es el error de JSON más común, porque el código JavaScript lo permite y muchos editores la dejan olvidada.

{"name": "Ada", "role": "admin",}   // inválido
{"name": "Ada", "role": "admin"}    // válido

Solución: borra la coma antes del } o ] de cierre.

2. Comillas simples

Las cadenas y claves de JSON deben usar comillas dobles. Las comillas simples sirven en JavaScript y Python, pero no en JSON.

{'name': 'Ada'}    // inválido
{"name": "Ada"}    // válido

Solución: cambia las comillas simples alrededor de claves y valores por comillas dobles. Ten cuidado con los apóstrofos dentro del texto, como en "it's", que son correctos y deben quedarse.

3. Claves sin comillas

Cada nombre de propiedad debe ser una cadena entre comillas.

{name: "Ada"}      // inválido
{"name": "Ada"}    // válido

4. Comas que faltan

Cuando dos valores quedan juntos sin coma, el analizador se queja del segundo. Suele pasar tras editar un archivo a mano o unir dos fragmentos.

{"a": 1 "b": 2}    // inválido
{"a": 1, "b": 2}   // válido

Solución: añade la coma justo después del valor anterior, antes de la posición que señala el error.

5. Comentarios

El JSON estándar no tiene comentarios. Tanto // ... como /* ... */ son inválidos. Algunas herramientas usan formatos relajados (JSONC o JSON5) para archivos de configuración, que sí permiten comentarios y comas finales, pero un analizador de JSON estricto los rechazará.

Solución: elimina los comentarios, o guarda las notas en un campo normal como "_comment": "..." si el programa que lo recibe ignora las claves desconocidas.

6. Valores de Python o JavaScript

JSON solo conoce true, false y null en minúsculas. Los True, False y None de Python son inválidos, igual que los undefined, NaN e Infinity de JavaScript.

Solución: conviértelos a sus equivalentes de JSON y transforma valores como NaN en null o en una cadena. Si imprimes un diccionario de Python, usa json.dumps() en lugar de print() o str(), que producen sintaxis de Python, no JSON.

7. Comillas tipográficas de documentos y apps de chat

El texto copiado de un procesador de textos, una presentación o una app de mensajería suele traer comillas curvas (“ ”) en lugar de rectas ("). Se ven casi iguales, pero son caracteres distintos.

Solución: cambia las comillas curvas alrededor de claves y valores por comillas dobles rectas, y copia el código desde fuentes de texto plano siempre que puedas.

8. Escapes incorrectos y saltos de línea dentro de cadenas

Una barra invertida inicia una secuencia de escape, así que una ruta de Windows como "C:\new\file" falla o cambia de significado sin avisar. Un salto de línea real dentro de una cadena también es inválido.

{"path": "C:\new\file"}       // inválido
{"path": "C:\\new\\file"}     // válido
{"note": "line one\nline two"} // válido: el salto de línea está escapado

Solución: duplica cada barra invertida literal y escribe los saltos de línea como \n.

9. Corchetes que faltan o sobran

Un error como Unexpected end of JSON input suele significar que falta un } o ] de cierre, o que el texto se cortó a mitad. Un corchete de más produce un error de token inesperado cerca del final.

Solución: formatea las partes que sí se analizan, o aplica sangría a mano, y cuenta los corchetes de apertura y cierre nivel por nivel. Si la entrada se truncó (por ejemplo, una línea de log con límite de longitud), consigue el original completo en vez de adivinar el final.

10. Varios documentos JSON pegados

Un documento JSON contiene exactamente un valor de nivel superior. Dos objetos seguidos, como {"id":1}{"id":2}, no son válidos como un único documento, y tampoco lo es un archivo de log delimitado por saltos de línea donde cada línea es un objeto.

Solución: envuelve los elementos en un array, [{"id":1},{"id":2}], o analiza el archivo línea por línea si está pensado como delimitado por saltos de línea.

Cómo interpretar los mensajes de error

Cada lenguaje y navegador describe el mismo problema con palabras distintas. Así se traducen los mensajes que más vas a ver.

Unexpected token < in JSON at position 0

El primer carácter es <, lo que significa que el texto es HTML, no JSON. Un servidor devolvió una página de error, de inicio de sesión o un 404 en lugar de datos. Revisa el código de estado HTTP y la cabecera Content-Type antes de analizar. Nuestra consulta de cabeceras HTTP muestra ambos para cualquier URL pública, y el verificador de redirecciones revela si la petición se está redirigiendo a otro sitio, como una página de acceso.

Unexpected token u in JSON at position 0

El valor que pasaste al analizador era undefined, que se convierte en el texto undefined. El fallo está antes en tu código: la variable nunca se asignó.

Unexpected end of JSON input

El analizador llegó al final antes de que la estructura estuviera completa. Busca un corchete que falte o un cuerpo de respuesta vacío.

Expected property name or '}' / Expecting property name enclosed in double quotes

El primer mensaje viene de JavaScript y el segundo del módulo json de Python. Ambos suelen señalar una coma final, una clave con comillas simples o una clave sin comillas.

Un carácter invisible en la posición 0

Si el texto parece perfecto pero falla en el primer carácter, puede empezar con una marca de orden de bytes (BOM) u otro carácter invisible. Guarda el archivo como UTF-8 sin BOM o elimina ese primer carácter antes de analizar.

Ejemplo práctico: arreglar un fragmento de configuración roto

Este es un fragmento que alguien pegó desde un mensaje de chat:

{
  name: 'My App',
  "debug": True,
  // turn this off in production
  "plugins": ["seo", "cache",],
  "path": "C:\apps\myapp"
}

El validador se detiene en el primer error, la clave sin comillas de la línea 2. Corrigiendo de uno en uno:

  • Línea 2: pon la clave entre comillas y usa comillas dobles, quedando "name": "My App".
  • Línea 3: cambia True por true.
  • Línea 4: borra el comentario.
  • Línea 5: quita la coma después de "cache".
  • Línea 6: duplica las barras invertidas, quedando "C:\\apps\\myapp".

El resultado válido:

{
  "name": "My App",
  "debug": true,
  "plugins": ["seo", "cache"],
  "path": "C:\\apps\\myapp"
}

Validar JSON desde la línea de comandos

Para archivos grandes o comprobaciones automáticas, valida en local. Cada uno de estos comandos termina con error si la entrada es inválida, así que puedes usarlos en scripts:

  • python3 -m json.tool data.json imprime el JSON formateado, o un error con su línea y columna.
  • jq empty data.json revisa el archivo y no imprime nada si es válido (hay que tener jq instalado).
  • node -e "JSON.parse(require('fs').readFileSync('data.json','utf8'))" usa el mismo analizador que las apps de Node.js.

Errores que conviene evitar

  • No arregles el síntoma con buscar y reemplazar. Reemplazar a ciegas todas las comillas simples también rompe los apóstrofos dentro del texto. Corrige solo las comillas alrededor de claves y valores.
  • No ocultes los errores de análisis. El código que devuelve un objeto vacío cada vez que falla el análisis esconde fallos reales. Registra el error y los primeros caracteres de la entrada (sin registrar datos privados).
  • Arregla el origen, no solo la salida. Si un sistema genera JSON roto una y otra vez, constrúyelo con un serializador como JSON.stringify() o json.dumps() en lugar de concatenar cadenas.
  • Atento a datos ocultos en otras codificaciones. El JSON dentro de una URL o un token suele llegar codificado. Decodifícalo primero con el decodificador de URL o el decodificador Base64 y luego valídalo.

Herramientas y guías relacionadas

Preguntas frecuentes

¿Por qué mi JSON es inválido si se ve bien?

Los sospechosos habituales son caracteres invisibles o parecidos: una coma final, comillas tipográficas curvas en lugar de rectas, una marca de orden de bytes al inicio del archivo o un comentario. Un validador señala la ubicación exacta para que no tengas que buscar a ojo.

¿Se permiten comas finales en JSON?

No. El JSON estándar no permite una coma después del último elemento de un objeto o array. Formatos relajados como JSONC y JSON5 las permiten, pero analizadores estrictos como JSON.parse las rechazan.

¿Puede JSON tener comentarios?

No. El JSON estándar no tiene sintaxis de comentarios. Elimínalos antes de analizar, o usa un campo normal como _comment si el programa que lee el archivo ignora las claves extra.

¿Qué significa Unexpected token < in JSON at position 0?

El texto empieza con un signo menor que, así que casi seguro es una página HTML, como una página de error, de inicio de sesión o un 404, en lugar de JSON. Revisa el código de estado HTTP, la cabecera Content-Type y la URL que solicitaste.

¿JSON distingue mayúsculas de minúsculas?

Sí. Los literales deben ser true, false y null en minúsculas, y las claves distinguen mayúsculas, así que Name y name son dos claves distintas.

¿Qué diferencia hay entre validar y formatear JSON?

Validar comprueba si el texto sigue las reglas de JSON e informa del primer error. Formatear añade saltos de línea y sangría a un JSON válido para que se lea con más facilidad. No cambia los datos.

Cómo saber cuándo vence un certificado SSL (4 formas)

29 Octubre, 2026

Mira cuándo vence cualquier certificado SSL: en línea, en el navegador o con openssl y curl. Ejemplos reales y lo que una fecha vigente no g..

Cómo consultar registros DNS de un dominio: A, MX, TXT y CNAME

28 Octubre, 2026

Consulta registros DNS en línea o con dig y nslookup. Qué hacen los registros A, AAAA, CNAME, MX, TXT, NS y CAA, y cómo resolver problemas c..