Datos JSON (.json)
RFC EstándarJavaScript Object Notation (JSON) es un formato de texto ligero y legible para el intercambio de datos. Es independiente del lenguaje de programación y se usa ampliamente en las API web.
Convertir de JSON a HTML
Convertidor gratuito de JSON a HTML en el navegador. Convierte archivos al instante en tu dispositivo.
Comprimir JSON en línea
Privado - los archivos nunca salen de tu dispositivo
Inspección y metadatos
Los sistemas operativos y analizadores de archivos identifican los archivos de JSON inspeccionando la secuencia de bytes binarios inicial:
Firma de cabecera a nivel de bytes (bytes mágicos)
Los sistemas operativos y analizadores de archivos identifican los archivos de JSON inspeccionando la secuencia de bytes binarios inicial:
FIRMA HEXADECIMAL (DESPLAZAMIENTO 0):
7B or 5BREPRESENTACIÓN ASCII: { or [
Estandarización: RFC 8259 / ECMA-404 / ISO/IEC 21778
Especificaciones técnicas
| Arquitectura del contenedor | Formato de intercambio de datos ligero, basado en texto e independiente del idioma |
| Compresión | Compresión de texto con Gzip, Brotli o Zstandard (suele reducir el tamaño entra un 80 % y un 90 %) |
| Orden de bytes (Endianness) | Unicode codificado en UTF-8 (se recomienda no usar marca de orden de bytes / BOM) |
| Espacios de color | No aplicable |
| Canales y estructura | Seis tipos de datos básicos: objeto, matriz, cadena, número, booleano y nulo |
| Dimensiones máximas | Sin límites propios; solo lo limitan la memoria del analizador y la longitud máxima de las cadenas |
| Transparencia | No aplicable |
| Streaming y progresivo | NDJSON (JSON delimitado por saltos de línea) y JSON Lines permiten procesar progresivamente los datos recibidos en un flujo. |
Matriz de comparación técnica: JSON frente a la competencia
| Atributo técnico | JSON (Actual) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Complejidad sintáctica | Mínima (6 tipos, sintaxis estricta) | Alta (se basa en la indentación y tiene una especificación compleja) | Alta (etiquetas de cierre verbosas, espacios de nombres) | Formato binario en red definido por esquema |
| Rendimiento del análisis | Extremadamente rápido en todos los lenguajes modernos | Lento (el análisis de la indentación es complejo) | De moderado a lento (la construcción del DOM consume muchos recursos) | Ultrarrápido (deserialización binaria sin copias) |
| Compatibilidad con comentarios | No (se excluyeron deliberadamente para evitar acumular metadatos) | Sí (comentarios #) | Sí (comentarios <!-- -->) | Sí en archivos .proto |
| Tamaño de los datos enviados por la red | Texto compacto (relación gzip muy alta) | Texto compacto | Texto verboso (repite muchas etiquetas) | Binario ultracompacto |
Modos de corrupción comunes y guía de recuperación hexadecimal
SyntaxError: token , inesperado en JSON en la posición X.
Causa raíz: Hay una coma después del último elemento de una matriz u objeto, lo cual está expresamente prohibido en JSON según RFC 8259.
Recuperación: Elimina las comas que siguen al último elemento de los objetos y las matrices antes de pasar el contenido a JSON.parse().
SyntaxError: token ' inesperado en JSON.
Causa raíz: Cadenas o claves encerradas entre comillas simples ('') en lugar de comillas dobles ("").
Recuperación: Reemplace todas las cadenas y claves entre comillas simples por cadenas estándar entre comillas dobles.
Análisis de seguridad y vectores de ataque al analizador
JSON solo contiene texto y no puede ejecutar código directamente, pero analizar datos JSON no confiables puede provocar contaminación de prototipos, ataques ReDoS o agotamiento de memoria.
Vectores de ataque conocidos
- Contaminación de prototipos: claves como «__proto__» o «constructor» modifican Object.prototype en aplicaciones JavaScript.
- Denegación de servicio por desbordamiento de pila debido a estructuras JSON profundamente anidadas (por ejemplo, 10 000 corchetes de apertura).
- Pérdida de precisión numérica: Los números de JavaScript mayores que 2^53 - 1 (9.007.199.254.740.991) pierden precisión silenciosamente.
Mejores prácticas defensivas: Nunca evalúe JSON con eval(). Usa JSON.parse() y sanea las propiedades «__proto__» en las funciones que combinan objetos recursivamente.
Orígenes históricos e hitos
Ventajas principales
- Estructura de texto concisa, legible y autodescriptiva.
- Todos los principales lenguajes de programación incluyen compatibilidad con su análisis; los motores JavaScript lo hacen de forma nativa (JSON.parse).
- Su especificación estricta impide ejecutar código arbitrario.
Limitaciones técnicas
- No admite comentarios, comas finales ni referencias circulares a objetos.
- No admite tipos binarios de forma nativa (los datos binarios deben codificarse en base64, lo que aumenta su tamaño un 33 %).
- Serialización ineficiente en comparación con formatos binarios como Protocol Buffers o MessagePack.
Curiosidades técnicas interesantes
- Douglas Crockford añadió a las herramientas JSMin originales para JSON la cláusula de licencia «El software debe usarse para el bien, no para el mal».
- JSON es un subconjunto estricto de la sintaxis de JavaScript, pero hasta ES2019 los caracteres U+2028 y U+2029 sin escapar eran válidos en JSON e inválidos en las cadenas de JavaScript.
- Douglas Crockford descubrió que los primeros navegadores podían convertir JSON directamente en objetos con la función nativa eval() de JavaScript, antes de que ECMAScript 5 estandarizara la API JSON.parse().
Preguntas técnicas frecuentes
¿Por qué JSON no permite comentarios?
La gramática de JSON no admite comentarios. Las implementaciones pueden tratar de forma distinta las extensiones y los datos específicos de cada aplicación, por lo que el formato por sí solo no garantiza la interoperabilidad.
¿Cómo se almacenan enteros de 64 bits en JSON sin perder precisión?
El tipo Number nativo de JavaScript es un número de coma flotante de doble precisión según IEEE 754, que solo representa con precisión enteros de hasta 2^53 - 1. Por eso, los enteros de 64 bits (como identificadores de bases de datos o marcas de tiempo) deben serializarse como cadenas en JSON (por ejemplo, «1234567890123456789»).
¿Cuál es la diferencia entre JSON y NDJSON / JSON Lines?
El JSON estándar contiene una carga completa en un único objeto o matriz raíz, por lo que el analizador debe cargar todo el texto antes de procesarlo. NDJSON (JSON delimitado por saltos de línea) separa cada registro JSON válido con un salto de línea (\n), lo que permite procesar en streaming, línea por línea y con poca memoria, conjuntos de datos de varios gigabytes.
Pares de conversión de JSON relacionados
Convertir datos JSON en código HTML transforma pares clave-valor estructurados en documentos web legibles y listos para mostrarse en el navegador.
Convertir código HTML en datos JSON transforma documentos web legibles en pares clave-valor estructurados para procesarlos automáticamente e incorporarlos mediante API.
La conversión de un script de texto de volcado SQL en una exportación de datos JSON transforma las tablas rígidas de bases de datos relacionales en objetos flexibles y anidados para aplicaciones web modernas.
Convertir archivos de texto JSON sin estructura en bases de datos relacionales SQLite permite indexar y consultar rápidamente grandes conjuntos de datos.
Convertir archivos Adobe Swatch Exchange a estructuras JSON de colores transforma paletas de diseño binarias en objetos de texto legibles para aplicaciones web modernas.
Convertir datos de texto JSON de colores en muestras binarias Adobe ASE conecta los tokens de diseño web con las aplicaciones profesionales de maquetación para escritorio.
Convertir archivos de texto de paletas GIMP a estructuras JSON de colores permite a las aplicaciones web leer muestras de color directamente sin scripts complejos de análisis.
Convertir archivos JSON de colores estructurados en variables CSS transforma objetos de datos sin procesar en propiedades de estilo nativas para sitios web.