Definición
JSON (siglas de JavaScript Object Notation) es un formato de intercambio de datos basado en texto plano, ligero y legible por humanos. Surgió como una forma natural de serializar objetos de JavaScript pero rápidamente se convirtió en el formato universal para mover datos entre sistemas.
Hoy, prácticamente cualquier API web moderna envía y recibe datos en JSON. También es el formato típico para archivos de configuración (package.json, tsconfig.json, composer.json...), respuestas de webhooks, mensajes en colas, y casi cualquier cosa que necesite "datos estructurados sobre texto".
A pesar del nombre, JSON no depende de JavaScript: lo usa Python, Java, PHP, C#, Go, Rust... cualquier lenguaje moderno tiene soporte nativo o muy maduro para parsearlo y generarlo.
Sintaxis
JSON tiene 6 tipos de datos y reglas muy simples:
| Tipo | Ejemplo |
|---|---|
| Objeto | { "clave": "valor" } |
| Array | [1, 2, 3] |
| String | "hola mundo" (siempre con comillas dobles) |
| Número | 42, 3.14, -7 |
| Boolean | true, false |
| Null | null |
Reglas:
- Claves siempre entre comillas dobles (a diferencia de JavaScript)
- Comas separando elementos, pero no coma al final del último (esto rompe parsers estrictos)
- No admite comentarios (al revés que YAML o JavaScript)
- No admite fechas como tipo nativo — se serializan típicamente como string ISO 8601
Ejemplo práctico
Respuesta típica de una API REST consultando un pedido en IMDICA:
{
"id": "PED-2026-0142",
"fecha": "2026-05-20T10:34:00Z",
"cliente": {
"id": 87,
"nombre": "Talleres García",
"cif": "B12345678"
},
"lineas": [
{
"producto": "FRC-010-CAR",
"descripcion": "Fresa de carburo Ø10mm",
"cantidad": 5,
"precio": 23.50,
"subtotal": 117.50
},
{
"producto": "MAC-M8-HSS",
"descripcion": "Macho HSS M8",
"cantidad": 12,
"precio": 4.20,
"subtotal": 50.40
}
],
"total": 167.90,
"estado": "pendiente_envio",
"incidencia": null
}
Fíjate: objetos anidados (cliente), arrays de objetos (lineas), tipos mixtos (números, strings, null). Todo encaja sin esfuerzo en cualquier lenguaje moderno.
JSON vs alternativas
| Formato | Pros | Contras |
|---|---|---|
| JSON | Universal, simple, soporte nativo en todos los lenguajes | No admite comentarios, sin tipos avanzados (fechas, binarios) |
| YAML | Permite comentarios, más legible para humanos, super-set de JSON | Más complejo de parsear, espacios significativos (peligroso) |
| XML | Soporte de esquemas y namespaces, validación estricta | Verboso, más lento de parsear, anticuado para APIs |
| CSV | Compacto para datos tabulares, abrible en Excel | Sin estructura jerárquica, problemas con comas y comillas |
| Protobuf / MessagePack | Binario y ultra eficiente | No legible por humanos, requiere schemas |
Para APIs web públicas y datos jerárquicos, JSON gana casi siempre.
Errores comunes
- Usar comillas simples: en JavaScript funciona, en JSON puro NO. Solo comillas dobles.
- Coma al final del último elemento:
{ "a": 1, "b": 2, }— los parsers estrictos lo rechazan. Quítala siempre. - Embebir HTML sin escape: si dentro de un string JSON metes HTML con comillas, debes escaparlas. Mejor usa
JSON.stringifyque lo hace por ti. - Asumir que JSON conserva el orden de claves: el estándar no lo garantiza, aunque la mayoría de implementaciones modernas sí. Si el orden importa, usa un array.
- Pasar objetos JavaScript directamente a
fetch: siempre necesitasJSON.stringifyantes —fetchno serializa automáticamente. - Olvidar el header
Content-Type: application/json: sin él, el servidor puede no parsear el body como JSON. - Confundir JSON con JavaScript: JSON es un sub-conjunto. Hay JavaScript válido que NO es JSON (funciones, undefined, comentarios, propiedades sin comillas, etc.).
Trabajar con JSON en código
// Objeto → JSON string (serializar)
const obj = { nombre: 'IMDICA', activo: true, productos: 47 };
const texto = JSON.stringify(obj);
// → '{"nombre":"IMDICA","activo":true,"productos":47}'
// JSON string → objeto (parsear)
const data = JSON.parse(texto);
console.log(data.productos); // → 47
// Pretty print con indentación de 2 espacios
console.log(JSON.stringify(obj, null, 2));
Cuándo NO usar JSON
- Archivos de configuración complejos con comentarios → mejor YAML o TOML
- Datos binarios (imágenes, audio) → usa binary direct, no embebido en JSON base64 salvo casos puntuales
- Streaming de eventos a alta frecuencia → mejor formatos binarios como Protobuf o MessagePack
- Datos tabulares para Excel → CSV es más práctico
Referencias
- Especificación oficial JSON (RFC 8259)
- json.org — referencia visual de la sintaxis
- MDN — Trabajar con JSON