Datos JSON (.json)

RFC Estándar

JavaScript 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:

Selecciona o arrastra archivos aquí

Privado - los archivos nunca salen de tu dispositivo

o pega Ctrl+V
Garantía de privacidad sin transmisión de red: 0 bytes subidos a servidores externos. Todo el procesamiento se realizó de forma local en el entorno seguro de tu navegador.

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 5B

REPRESENTACIÓN ASCII: { or [

Estandarización: RFC 8259 / ECMA-404 / ISO/IEC 21778

Especificaciones técnicas

Arquitectura del contenedorFormato de intercambio de datos ligero, basado en texto e independiente del idioma
CompresiónCompresió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 colorNo aplicable
Canales y estructuraSeis tipos de datos básicos: objeto, matriz, cadena, número, booleano y nulo
Dimensiones máximasSin límites propios; solo lo limitan la memoria del analizador y la longitud máxima de las cadenas
TransparenciaNo aplicable
Streaming y progresivoNDJSON (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écnicoJSON (Actual)YAMLXMLProtocol Buffers
Complejidad sintácticaMí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álisisExtremadamente rápido en todos los lenguajes modernosLento (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 comentariosNo (se excluyeron deliberadamente para evitar acumular metadatos)Sí (comentarios #)Sí (comentarios <!-- -->)Sí en archivos .proto
Tamaño de los datos enviados por la redTexto compacto (relación gzip muy alta)Texto compactoTexto 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

2017RFC 8259 estandariza UTF-8 como la única codificación de caracteres obligatoria para JSON.
2013ECMA-404 define la sintaxis JSON, que se usa en muchos lenguajes de programación y plataformas.
2001Douglas Crockford especifica JSON para permitir la comunicación de datos sin estado entre navegador y servidor.

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.