Si llevas más de una semana escribiendo código, casi con toda seguridad te has topado con JSON. Aparece por todas partes — respuestas de APIs REST, archivos de configuración, documentos de bases de datos, almacenamiento del navegador, logs. Pero ¿qué es exactamente, y por qué se convirtió en el formato que se comió la web?
JSON significa JavaScript Object Notation. A pesar del nombre, es completamente independiente del lenguaje y tiene bibliotecas en todos los principales lenguajes de programación. Douglas Crockford lo formalizó a principios de los 2000 como una alternativa más simple a XML para la comunicación navegador–servidor. La especificación es tan pequeña que cabe en una tarjeta de visita — y en parte por eso ganó.
¿Cómo se ve realmente el JSON?
Aquí tienes un fragmento JSON que representa un objeto de usuario. Este único ejemplo cubre los seis tipos de datos que soporta JSON:
{
"name": "Alice",
"age": 30,
"score": 98.5,
"active": true,
"nickname": null,
"tags": ["developer", "blogger"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}Los seis tipos de datos de JSON
JSON soporta exactamente seis tipos de valores. Eso es todo. Esta simplicidad es una característica — puedes aprender el formato completo en una tarde.
{
"string": "Hello, world",
"integer": 42,
"float": 3.14159,
"boolean": true,
"nothing": null,
"array": [1, "two", false, null],
"object": { "nested": true }
}- Cadena — Cualquier texto entre comillas dobles.
"hello","2024-01-01",""son todas cadenas válidas. - Número — Entero o coma flotante. Sin distinción entre int y float. Nota:
NaNeInfinityno son números JSON válidos. - Booleano —
trueofalse, solo en minúsculas. - Null — Representa «ningún valor». Útil para campos opcionales que no se han establecido.
- Array — Una lista ordenada de valores. Puede mezclar tipos:
[1, "two", true, null]es perfectamente legal. - Objeto — Un conjunto de pares clave–valor. Las claves deben ser cadenas entre comillas dobles.
Una respuesta de API del mundo real
Así es como podría verse una respuesta real de una API REST al llamar a GET /api/users/42.
Observa cómo anida objetos y arrays para representar datos más ricos:
{
"id": 42,
"username": "alice_dev",
"email": "[email protected]",
"createdAt": "2023-06-15T09:30:00Z",
"preferences": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"roles": ["user", "editor"],
"lastLogin": "2024-01-10T14:22:00Z",
"stats": {
"postsPublished": 27,
"commentsWritten": 154,
"likesReceived": 489
}
}Podrías acceder a la preferencia de tema de alice_dev en JavaScript con
user.preferences.theme, u obtener su primer rol con user.roles[0].
Esa correspondencia natural con las primitivas del lenguaje es exactamente lo que hace que JSON se sienta tan fácil de usar.
Reglas de sintaxis JSON — Los tropiezos que pillan a todo el mundo
JSON parece simple pero tiene algunas reglas estrictas. Si te equivocas en una, toda tu carga útil fallará al parsear. Estos son los errores que veo más a menudo:
- Las claves deben ir entre comillas dobles.
{"name": "Alice"}es válido.{name: "Alice"}no. Esto desconcierta a los desarrolladores que vienen de JavaScript, donde las claves de objeto sin comillas funcionan. - Sin comas finales.
{"a": 1, "b": 2,}lanzará un error de parseo. JavaScript es permisivo aquí; la especificación JSON no lo es. - Sin comentarios. Los comentarios
//o/* */no existen en JSON. Si necesitas archivos de configuración con comentarios, considera YAML o TOML. - Sin
undefined. Elundefinedde JavaScript no existe en JSON. Usanullpara valores faltantes. - Las cadenas deben usar comillas dobles. Cadenas con comillas simples como
{'key': 'value'}son JSON inválido. - Sin ceros a la izquierda.
042es inválido.42o0.42están bien.
Por qué JSON conquistó la web
Antes de JSON, XML era el rey. Una respuesta típica de API XML era verbosa, requería un parser XML propiamente dicho, y se sentía como trabajar contra el lenguaje. JSON podía ser parseado por la función nativa de JavaScript JSON.parse() — sin necesidad de bibliotecas. Era más pequeño al transmitirse, legible de un vistazo, y mapeaba directamente a los objetos y arrays que los desarrolladores ya usaban a diario.
A finales de los 2000, la mayoría de APIs públicas empezaron a ofrecer JSON junto con XML. A principios de los 2010, muchas abandonaron por completo el soporte de XML. Hoy, la suposición por defecto para cualquier API REST es JSON. Incluso GraphQL, que reemplazó a REST en muchos contextos, sigue usando JSON como formato de respuesta.
JSON también se define por lo que no soporta
Algunas de las limitaciones de JSON son decisiones de diseño intencionales que lo mantienen simple e interoperable:
- Sin tipo fecha. Las fechas son simplemente cadenas. La convención es el formato ISO 8601:
"2024-01-15T09:30:00Z". - Sin datos binarios. Los archivos e imágenes se codifican típicamente en Base64 dentro de una cadena.
- Sin valores de función.
{"fn": function(){} }es inválido. JSON es puro datos, nunca código. - Sin claves duplicadas. Técnicamente permitido por la especificación pero el comportamiento es indefinido. En la práctica, los parsers toman el último valor.
Herramientas útiles para trabajar con JSON
Aquí tienes algunas herramientas a las que recurrirás constantemente al trabajar con JSON: JSON Formatter para formatear respuestas minificadas, JSON Validator para encontrar errores de sintaxis, JSON Minifier para comprimir JSON en producción, y JSON Path para consultar datos profundamente anidados sin escribir bucles.
La especificación oficial vive en json.org y vale realmente la pena leerla — toma unos 10 minutos y entenderás el formato por completo. La especificación formal del IETF es RFC 8259 por si alguna vez necesitas zanjar un debate.
Para cerrar
JSON es un formato de datos ligero y legible para humanos construido sobre seis tipos de valores: cadenas, números, booleanos, null, arrays y objetos. Tiene reglas de sintaxis estrictas pero sin sorpresas una vez que las conoces. La razón por la que se volvió ubicuo no es porque sea el formato más potente — es porque es el más simple que cubre el 95% de las necesidades reales de datos. Si estás construyendo algo relacionado con la web, entender JSON no es opcional. Es fundamental.