Errores comunes de JSON y cómo solucionarlos
Publicado
JSON se parece a JavaScript, pero sus reglas son mucho más estrictas. La mayoría de los errores de «JSON no válido» vienen de unas pocas costumbres que se arrastran del código. Estos son los más habituales, con la solución de cada uno.
Por qué JSON es más estricto que JavaScript
JSON es un formato de datos definido en el RFC 8259, no un lenguaje de programación. Para que sea sencillo e inequívoco en cualquier lenguaje que lo lea, solo admite cadenas entre comillas dobles, un conjunto fijo de valores (cadenas, números, objetos, arrays, true, false y null) y ningún extra como comentarios o comas finales. Por eso, un código que el navegador acepta sin problema como objeto de JavaScript puede ser rechazado por un analizador JSON.
El formateador JSON comprueba tu JSON mientras escribes y señala la línea y la columna exactas del primer problema, con una explicación de la causa probable.
1. Comas finales
Una coma después del último elemento de un objeto o un array es el error más frecuente: {"a": 1, "b": 2,} o [1, 2, 3,]. JavaScript lo permite; JSON, no.
Solución: borra la coma que hay antes de la } o el ] de cierre.
2. Comillas simples y claves sin comillas
Las cadenas y los nombres de propiedad deben ir entre comillas dobles. {'nombre': 'Ada'} y {nombre: "Ada"} no son válidos; lo correcto es {"nombre": "Ada"}.
Solución: cambia las comillas simples por dobles y pon entre comillas dobles cada nombre de propiedad. Si una cadena contiene comillas dobles, escápalas como \".
3. Comas que faltan entre elementos
Al añadir una línea a mano, es fácil olvidar la coma al final de la línea anterior. El analizador encuentra entonces una clave nueva donde esperaba una coma o una llave de cierre, y señala el error al principio de la línea nueva, no al final de la anterior.
Solución: mira la línea anterior a la posición indicada y añade la coma que falta.
4. Comentarios
JSON no tiene comentarios: ni de línea con // ni de bloque con /* */. Los archivos de configuración que los incluyen suelen ser JSONC (JSON con comentarios, el que usan editores como VS Code) o JSON5, que son formatos distintos.
Solución: elimina los comentarios o pasa las explicaciones a un campo "_comentario" si el programa que lee el archivo ignora las claves desconocidas.
5. Valores que no son JSON válido
- undefined, NaN e Infinity existen en JavaScript, pero no en JSON. Usa null o guarda el valor como cadena.
- Los números no pueden tener ceros a la izquierda (007) ni un punto decimal final (1.). Escribe 7 y 1.0, o usa una cadena para códigos como los códigos postales.
- No se admiten números hexadecimales (0xFF); escribe el valor decimal.
6. Saltos de línea y tabulaciones dentro de las cadenas
Una cadena no puede ocupar varias líneas ni contener una tabulación sin escapar. El texto pegado desde un documento suele traerlas consigo.
Solución: escribe los saltos de línea como \n y las tabulaciones como \t dentro de la cadena. Si necesitas enviar datos binarios o un archivo entero dentro de un JSON, codifícalo antes en Base64.
7. Números grandes que cambian sin avisar
Este no es un error de sintaxis, y por eso es peligroso. JavaScript guarda todos los números como valores de coma flotante de 64 bits, así que los enteros mayores que 9.007.199.254.740.991 pierden precisión al leerlos: un identificador como 12345678901234567890 se convierte en 12345678901234567000. Muchos formateadores online lo cambian sin avisar.
Solución: envía los identificadores grandes como cadenas. Si solo necesitas leer o reformatear un JSON, usa una herramienta que conserve las cifras originales, como el formateador JSON.
Lista rápida
- Comillas dobles en todas las cadenas y todas las claves.
- Comas entre elementos, pero nunca después del último.
- Nada de comentarios, undefined, NaN ni ceros a la izquierda.
- Escapa los saltos de línea (\n), las tabulaciones (\t), las comillas (\") y las barras invertidas (\\) dentro de las cadenas.
- Identificadores grandes como cadenas.