[Herramientas para desarrolladores]•6 min de lectura
Cinco motivos por los que falla el parseo de JSON y la trampa de los números grandes
1. JSON es más estricto de lo que parece
JSON se parece a un literal de objeto de JavaScript, pero permite mucho menos. Lo definen RFC 8259 y ECMA-404, y muchas cosas válidas en JavaScript no lo son en JSON.
2. Cinco motivos por los que falla el parseo
① Coma final
{"a": 1, "b": 2,} — una coma después del último miembro es un error. JavaScript la permite; JSON no.② Claves sin comillas
{a: 1} — las claves deben ser cadenas entre comillas dobles.③ Comillas simples
{'a': 'b'} — JSON solo reconoce comillas dobles.④ Comentarios
Ni
// nota ni /* */ existen en el JSON estándar. Los archivos de configuración que necesiten comentarios deben usar una extensión como JSONC o JSON5.⑤ Valores especiales
NaN, Infinity y undefined no son JSON. Representa un número ausente como null o como cadena.Otro error habitual es un salto de línea literal dentro de una cadena; debe escaparse como
\n.3. Cómo leer la posición del error
Los parsers suelen indicar algo como "position 42", pero la causa real suele estar antes. Basta una comilla que falta para que el parser se trague el resto del documento como parte de una cadena hasta fallar mucho más adelante.
Pasar el documento por un formateador para desplegar la estructura hace que el anidamiento descuadrado sea fácil de detectar.
4. La trampa de los números grandes
No es un error de sintaxis, sino un cambio silencioso de valor, y eso lo hace más peligroso.
Los números de JavaScript son flotantes de doble precisión, así que los enteros solo se representan con exactitud hasta:
Number.MAX_SAFE_INTEGER = 9007199254740991Al parsear un entero mayor con
JSON.parse, su valor cambia sin avisar. Por ejemplo, 12345678901234567890 se convierte en 12345678901234567000, sin error ni advertencia.Cuándo te afecta
La solución
El remedio estándar es que el servidor serialice esos valores como cadenas:
{"id": "12345678901234567890"}. Si el cliente tiene que tratarlos como números, usa BigInt con un reviver personalizado.5. Variantes de JSON
| Formato | Diferencia | Uso |
|---|---|---|
| JSON | El estándar | Respuestas de API, intercambio de datos |
| JSONC | Permite comentarios | Ajustes de VS Code y similares |
| JSON5 | Comentarios, comas finales, comillas simples | Archivos de configuración escritos a mano |
| NDJSON / JSON Lines | Un valor JSON por línea | Logs, streaming, procesamiento masivo |
No devuelvas JSONC desde una API solo porque funcione en un archivo de configuración; los parsers estándar lo rechazarán.
6. Una nota de seguridad
Todavía aparece de vez en cuando código que pasa una cadena JSON por
eval(). Nunca lo hagas. Una entrada no confiable que contenga código se ejecutará como código. JSON.parse es seguro.7. Herramienta
El Formateador JSON de EVEDAYS valida y formatea dentro de tu navegador. Las respuestas de API suelen contener datos personales o tokens, así que una herramienta que nunca los transmite es la opción más segura.