RFC 7159

Estándares Y Rfcs Jan 6, 2025 JSON

Definicion

Cada vez que usas un sitio web, una app móvil o interactúas con prácticamente cualquier software moderno, hay muy buenas probabilidades de que JSON esté involucrado entre bastidores. RFC 7159 fue la especificación que definió formalmente este omnipresente formato de datos allá por 2014, estableciendo las reglas que todos siguen al intercambiar datos estructurados en la web.

JSON significa JavaScript Object Notation (Notación de Objetos JavaScript), pero que el nombre no te engañe - lo usa absolutamente cualquier lenguaje de programación que te imagines, no solo JavaScript. La razón por la que JSON se volvió tan popular es que es increíblemente simple. Es solo texto que representa datos estructurados usando un puñado de conceptos básicos: objetos (llaves), arrays (corchetes), strings, números, booleanos y null. Eso es todo. Un niño de cinco años podría entender la estructura básica, y aun así es lo suficientemente potente para representar virtualmente cualquier dato.

Ahora bien, aquí va una nota importante: RFC 7159 ha sido reemplazado por RFC 8259 en 2017. La especificación más nueva no cambió la sintaxis de JSON - son las mismas llaves y corchetes que conoces y adoras. La actualización principalmente aclaró que el texto JSON DEBE estar codificado en UTF-8 y añadió mejores directrices para la interoperabilidad entre diferentes sistemas. Si estás implementando JSON hoy, deberías seguir RFC 8259, pero conocer RFC 7159 te ayuda a entender la evolución.

Ejemplo

Tu feed de redes sociales: Cuando scrolleas por Twitter o Facebook, la app está recibiendo datos JSON del servidor. Cada publicación llega como un objeto JSON conteniendo el texto, autor, timestamp, contador de likes y comentarios - todo estructurado de una forma que la app puede parsear y mostrar fácilmente.

Apps del tiempo: Cuando una app del tiempo te muestra el pronóstico, probablemente está obteniendo JSON de una API meteorológica. Algo como {"ciudad": "Madrid", "temperatura": 18, "condiciones": "nublado", "pronostico": [...]}. Simple, legible, eficiente.

Compras online: Añade un artículo a tu carrito en Amazon, y tu navegador envía JSON al servidor: {"productId": "B07XJ8C8F5", "quantity": 2}. El servidor responde con información actualizada del carrito en formato JSON.

Dispositivos de hogar inteligente: Cuando le pides a Alexa que encienda las luces, la comunicación entre los servidores de Amazon y la API del fabricante de tu bombilla inteligente frecuentemente usa JSON: {"device": "luz-salon", "action": "on", "brightness": 75}.

Analogia

El Contenedor de Envío Universal: Antes de los contenedores de envío estandarizados, cargar un barco era caótico - cada caja tenía un tamaño diferente. JSON es como el contenedor de envío de los datos: un formato estandarizado con el que todo sistema puede trabajar. No importa si el emisor es un servidor Python y el receptor es una app JavaScript - el contenedor JSON simplemente funciona.

El Sistema de Archivadores Anidados: Piensa en JSON como un archivador donde cada cajón (objeto) contiene carpetas (objetos anidados), y cada carpeta contiene documentos (valores). Puedes tener carpetas dentro de carpetas, creando jerarquías organizadas de información. Lo bonito es que cualquiera que abra el archivador entiende inmediatamente la organización.

El Formato Universal de Recetas: Imagina un formato de fichas de recetas universal que todos los libros de cocina del mundo usan. Los ingredientes siempre se listan de la misma manera, las instrucciones siempre tienen el mismo formato. Eso es JSON para los datos - un formato universal en el que todos están de acuerdo.

El Manual de Instrucciones de LEGO: Las instrucciones de LEGO son universalmente comprensibles porque siguen un formato consistente. JSON es el LEGO de los formatos de datos - bloques simples de construcción que pueden crear estructuras complejas, siguiendo reglas que todos entienden.

Code Example


// Tipos de datos JSON definidos en RFC 7159 (todavía válido)
{
  "string": "Hola",
  "number": 42,
  "float": 3.14,
  "boolean": true,
  "null": null,
  "array": [1, 2, 3],
  "object": {
    "anidado": "valor"
  }
}

// Sin comas finales (sigue siendo inválido)
{
  "valido": true,
  "invalido": false,  // ← Esta coma NO está permitida
}

// Los números no pueden tener ceros iniciales
{
  "invalido": 007,  // ✗ Incorrecto
  "valido": 7       // ✓ Correcto
}

// Usa RFC 8259 para implementaciones actuales