JSON
13 tools
¿Qué es JSON?
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos, basado en texto, fácil de leer y escribir para los humanos y fácil de analizar y generar para las máquinas. Aunque se deriva de JavaScript, JSON es independiente del lenguaje y es ahora el estándar de facto para el intercambio de datos en la web.
JSON representa datos como pares clave-valor organizados en objetos y arrays. Su simplicidad lo convirtió en el formato dominante para APIs REST, archivos de configuración y almacenamiento de datos, sustituyendo al más verboso XML en la mayoría de las aplicaciones modernas.
Una breve historia
JSON fue formalizado por Douglas Crockford a principios de los años 2000, aunque el formato ya era implícito en la sintaxis de JavaScript. La especificación se publicó en json.org en 2001. El RFC 4627 siguió en 2006, y el actual estándar ECMA-404 se publicó en 2013.
Antes de JSON, XML era el formato de intercambio de datos dominante en la web. El minimalismo de JSON —sin atributos, instrucciones de procesamiento ni espacios de nombres— lo hizo inmediatamente popular entre los desarrolladores. Para 2010, JSON había desplazado en gran medida a XML en las APIs web.
Tipos de datos JSON
JSON admite exactamente seis tipos de datos. Cada valor en un documento JSON válido debe ser uno de estos:
"hello world"Cualquier secuencia de caracteres Unicode entre comillas dobles. Se admiten secuencias de escape con barra invertida (\n, \t, \").
42 / 3.14 / 1e10Entero o de punto flotante. Se permite notación científica (1e10). No hay distinción entre int y float a nivel JSON.
true / falseLos tokens literales true o false (solo en minúsculas). No hay valores verdaderos/falsos — solo booleano estricto.
nullEl token literal null (en minúsculas). Representa la ausencia de valor. Diferente de undefined, que no es un tipo JSON.
[1, "two", null]Una lista ordenada de valores entre corchetes. Los elementos pueden ser de tipos mixtos y los arrays pueden anidarse arbitrariamente.
{"key": "value"}Una colección no ordenada de pares clave-valor entre llaves. Las claves deben ser cadenas. Los valores pueden ser cualquier tipo JSON.
{
"string": "hello world",
"number": 42,
"float": 3.14,
"boolean": true,
"null": null,
"array": [1, 2, 3],
"object": { "nested": "value" }
}Reglas de sintaxis JSON
JSON tiene reglas de sintaxis estrictas. Una pequeña desviación causa un error de análisis. Estas son las seis reglas más importantes:
Todos los valores de cadena y las claves de objeto deben usar comillas dobles. Las comillas simples no son JSON válido. Este es el error más común entre desarrolladores que vienen de JavaScript.
JSON no permite comas finales después del último elemento en un array o la última propiedad en un objeto. [1, 2, 3,] y {"a": 1,} son ambos inválidos.
JSON no tiene sintaxis de comentarios. // y /* */ no son válidos. Si necesitas comentarios en archivos de configuración, considera JSON5 o YAML.
JSON solo admite seis tipos primitivos. Los valores de JavaScript como undefined, NaN, Infinity y las funciones no pueden representarse y se omiten o convierten a null durante la serialización.
Todas las claves de objeto deben ser cadenas entre comillas. No se permiten claves numéricas, identificadores sin comillas ni otros tipos.
JSON es sensible a mayúsculas y minúsculas. true, false y null deben estar en minúsculas. TRUE, False o Null son tokens inválidos.
JSON inválido vs. válido
{
'name': 'Alice', // single quotes — invalid
age: 30, // unquoted key — invalid
"scores": [1, 2, 3,], // trailing comma — invalid
"note": undefined // undefined — invalid
}{
"name": "Alice",
"age": 30,
"scores": [1, 2, 3],
"note": null
}JSON en la web moderna
APIs REST
JSON es el formato de cuerpo estándar para solicitudes y respuestas de API REST. Content-Type: application/json es el tipo MIME más común en la web moderna. Prácticamente todos los lenguajes de programación tienen un analizador JSON integrado.
Archivos de configuración
package.json, tsconfig.json, .eslintrc y muchas otras herramientas de desarrollo usan JSON para la configuración. El formato estructurado y el soporte universal de analizadores lo hacen práctico, aunque la falta de comentarios es una crítica persistente.
Bases de datos NoSQL
Las bases de datos de documentos como MongoDB, CouchDB y Amazon DynamoDB almacenan datos como documentos JSON o similares. Esto permite almacenamiento flexible sin esquema que se mapea naturalmente a los objetos de la aplicación.
Estado y datos del frontend
localStorage y sessionStorage almacenan cadenas, por lo que JSON.stringify/JSON.parse se usan constantemente para serializar objetos JavaScript. Las respuestas de API de fetch() llegan como texto JSON y se analizan antes de usarse.
JSON vs. otros formatos
JSON no siempre es la mejor opción. Así es como se compara con otros formatos de datos comunes:
Sintaxis más simple, menor tamaño de archivo, más fácil de analizar, más legible
Sin soporte para atributos, instrucciones de procesamiento o espacios de nombres XML
Necesitas metadatos de documento, modelos de contenido mixto o esquemas XML
Sintaxis más estricta (menos ambigüedad), mejor soporte de herramientas, más portable
Sin soporte de comentarios, ligeramente más verboso para datos muy anidados
Archivos de configuración editados por humanos, Docker Compose, GitHub Actions, manifiestos de Kubernetes
Mayor soporte de ecosistema, análisis más rápido, manejo de tipos más predecible
Sin tipo de fecha nativo, menos amigable para estructuras anidadas complejas
Rust (Cargo.toml), Python (pyproject.toml), configuración de aplicaciones estilo INI
Datos estructurados y anidados, no limitado a filas y columnas planas
Tamaño de archivo mucho mayor, peor rendimiento para datos puramente tabulares
Datos de hoja de cálculo, exportaciones de bases de datos, datos para abrir en Excel o pandas
JSON Schema
JSON Schema es un vocabulario para validar la estructura de documentos JSON. Un esquema describe los tipos esperados, los campos requeridos y las restricciones de un valor JSON. La versión actual es JSON Schema 2020-12.
Herramientas como ajv (JavaScript), jsonschema (Python) y validadores integrados en muchos IDEs admiten JSON Schema. OpenAPI usa JSON Schema para describir los cuerpos de solicitudes y respuestas de API.
Errores comunes con JSON
Los números JSON se analizan como flotantes de doble precisión IEEE 754. Los enteros mayores que 2^53 pierden precisión. Pasa IDs grandes como cadenas, no como números.
JSON no tiene tipo de fecha. Las fechas se serializan típicamente como cadenas ISO 8601 o timestamps Unix. Tu código debe conocer la convención usada.
JSON.stringify lanza un TypeError en referencias de objeto circulares. Necesitas romper el ciclo o usar una biblioteca que lo maneje.
JSON debe codificarse como UTF-8, UTF-16 o UTF-32. Un Byte Order Mark (BOM) al inicio de un archivo JSON no es compatible con la especificación.
Al analizar JSON no confiable, fusionar objetos analizados puede ser vulnerable a ataques de contaminación de prototipo mediante la clave __proto__. Valida siempre el JSON de fuentes externas.
{"key": null} y una "key" faltante son semánticamente diferentes. Null significa que el campo existe con un valor ausente; faltante significa que el campo no se especificó.
Preguntas frecuentes
JSON significa JavaScript Object Notation. A pesar del nombre, JSON es completamente independiente del lenguaje y es compatible con prácticamente todos los lenguajes de programación.
No. JSON es un formato de texto que se parece a un literal de objeto JavaScript, pero tiene reglas más estrictas: las claves deben estar entre comillas dobles y no admite undefined, funciones ni comentarios.
No. La especificación JSON no incluye sintaxis de comentarios. Para archivos de configuración que necesitan comentarios, considera JSONC, JSON5 o YAML.
JSONP (JSON con Padding) fue una solución para la política del mismo origen del navegador que envolvía JSON en una llamada de función. Es obsoleto — usa CORS en su lugar.
En JavaScript: JSON.stringify(data, null, 2) agrega sangría de 2 espacios. En Python: json.dumps(data, indent=2). En la terminal: cat file.json | python3 -m json.tool o cat file.json | jq .
NDJSON (Newline Delimited JSON) almacena un objeto JSON por línea. Es popular para archivos de registro, flujos de eventos y exportaciones de datos grandes.
El espacio en blanco entre tokens es insignificante. {"a":1} y { "a" : 1 } son idénticos. El formato es una cuestión de estilo, no de semántica.
La especificación JSON no establece límite de tamaño. En la práctica, estás limitado por la memoria del analizador y la transferencia de red.
No directamente. Los datos binarios deben codificarse en Base64 antes de incluirse en JSON, lo que aumenta el tamaño en ~33%.
JSON5 es un superconjunto de JSON que agrega: claves sin comillas, cadenas con comillas simples, comas finales, comentarios y cadenas multilínea. Requiere un analizador separado.