RFC 8259

Estándares Y Rfcs Jan 6, 2025 JAVASCRIPT

Definicion

Si JSON es el idioma que las aplicaciones modernas usan para comunicarse, RFC 8259 es su diccionario oficial y guía de gramática. Publicada en 2017, esta especificación es el estándar definitivo y actual para JSON - el formato de datos que impulsa prácticamente cada API, archivo de configuración e intercambio de datos en la web hoy en día.

Podrías preguntarte: ya teníamos RFC 7159 definiendo JSON, ¿por qué necesitábamos otra? La respuesta corta es claridad y consistencia. Cuando diferentes sistemas intercambiaban JSON, a veces se encontraban con problemas: un sistema podía codificar texto en UTF-16, otro en UTF-8. Un parser podía aceptar claves duplicadas, otro las rechazaba. RFC 8259 resolvió estas ambigüedades de una vez por todas al hacer obligatoria la codificación UTF-8 y proporcionar guías más claras para casos límite.

La belleza de JSON, tal como está codificada en RFC 8259, es su simplicidad. Puedes aprender toda la sintaxis en unos cinco minutos: los objetos usan llaves, los arrays usan corchetes, los strings usan comillas dobles, y tienes números, booleanos y null. Eso es literalmente todo. Sin embargo, esta base simple puede representar cualquier cosa, desde el perfil de un usuario hasta estructuras de datos complejas anidadas con cientos de campos. Es legible por humanos (a diferencia de los formatos binarios) y parseable por máquinas (a diferencia de la prosa), alcanzando un punto dulce que lo ha convertido en el lenguaje universal de los datos web.

Ejemplo

Cada API moderna que usas: Ya sea que estés trabajando con Twitter, GitHub, Stripe o Google Maps, los datos van y vienen como JSON siguiendo RFC 8259. Solicita el perfil de un usuario, y recibes {"name": "Alicia", "followers": 1234}. Publica un nuevo tweet, y envías {"text": "¡Hola mundo!"}.

Archivos de configuración en todas partes: Desde package.json en proyectos JavaScript hasta tsconfig.json en TypeScript y archivos de configuración en VS Code - JSON es el formato preferido para configuración porque es tanto editable por humanos como legible por máquinas.

Bases de datos NoSQL: Bases de datos como MongoDB almacenan documentos en un formato similar a JSON (BSON). Cuando consultas datos o insertas registros, estás trabajando con estructuras JSON que siguen las reglas de RFC 8259.

Almacenamiento del navegador: Cuando las apps web almacenan datos en localStorage, típicamente serializan objetos a strings JSON. El RFC asegura que estos datos sobrevivan viajes de ida y vuelta a través de parsear y stringificar.

Analogia

El Estándar Internacional del Idioma: Así como hay organismos oficiales que definen idiomas (como la Real Academia Española para el español), RFC 8259 es el estándar oficial para JSON. Resuelve debates sobre qué es “correcto” y asegura que todos hablen el mismo dialecto.

La Notación de Partituras: Músicos de todo el mundo pueden leer las mismas partituras porque la notación sigue reglas universales. RFC 8259 proporciona la misma universalidad para los datos - un desarrollador en Tokio y uno en Toronto interpretarán el mismo JSON de manera idéntica.

El Sistema Métrico de los Datos: El sistema métrico proporciona un lenguaje de medición universal que funciona en todas partes. RFC 8259 proporciona un formato de datos universal que funciona en todos los lenguajes de programación, sistemas operativos y bases de datos.

La Piedra Rosetta: La Piedra Rosetta permitió a los académicos traducir entre idiomas al proporcionar el mismo texto en múltiples escrituras. JSON sirve un propósito similar - es el formato común que permite que backends de Java hablen con frontends de JavaScript, que scripts de Python se comuniquen con servicios de Go.

Code Example


// Estructura JSON de RFC 8259
{
  "string": "Hola, 世界",  // UTF-8 obligatorio
  "number": 42,
  "float": 3.14159,
  "boolean": true,
  "null": null,
  "array": [1, 2, 3],
  "object": {
    "anidado": "valor"
  }
}

// Escape de strings
{
  "comilla": "Él dijo \"Hola\"",
  "nuevaLinea": "Línea 1\nLínea 2",
  "unicode": "\u0048\u006F\u006C\u0061"
}

// Claves duplicadas: NO DEBERÍAS usar
{
  "nombre": "Primero",
  "nombre": "Segundo"  // ← Comportamiento impredecible
}

// Parseo seguro
try {
  const data = JSON.parse(jsonString);
} catch (e) {
  console.error('JSON inválido:', e.message);
}