¿Qué es JSON y cómo usarlo?
JSON (Notación de objetos de JavaScript) es un formato estandarizado para representar datos estructurados. Aunque JSON surgió del lenguaje de programación JavaScript, ahora es un método omnipresente para intercambiar datos entre sistemas. La mayoría de las API modernas aceptan solicitudes JSON y devuelven respuestas JSON, por lo que es bueno tener un buen conocimiento práctico del formato y sus funciones.
En este artículo, explicaremos qué es JSON, cómo expresa varios tipos de datos y cómo puede crearlo y usarlo en lenguajes de programación populares. También veremos algunas de las limitaciones de JSON y las alternativas que han surgido.
Conceptos básicos de JSON
JSON fue desarrollado originalmente por Douglas Crockford como un formato sin estado para transferir datos entre navegadores y servidores. A principios de la década de 2000, los sitios web comenzaron a obtener datos adicionales de forma asincrónica de su servidor después de la carga inicial de la página. Como formato de texto basado en JavaScript, JSON ha facilitado la obtención y el uso de datos en estas aplicaciones. La especificación finalmente se estandarizó como ECMA-404 en 2013 .
JSON siempre se pasa como una cadena. Estas cadenas se pueden decodificar en varios tipos de datos básicos, incluidos números, booleanos, matrices y objetos. Esto significa que las jerarquías y relaciones de objetos pueden almacenarse durante la transmisión y luego volver a ensamblarse en el extremo receptor de una manera adecuada para el entorno de programación.
Ejemplo simple de JSON
Esta es la representación JSON de la publicación del blog:
Este ejemplo demuestra todos los tipos de datos JSON. También ilustra la brevedad de los datos JSON, una de las características que los hace tan atractivos para usar en una API. Además, JSON es relativamente fácil de leer tal cual, a diferencia de formatos más detallados como XML .
Tipos de datos JSON
Seis tipos de datos se pueden representar de forma nativa en JSON:
- Cadenas: las cadenas se escriben entre comillas dobles; los caracteres se pueden escapar con una barra invertida.
- Números: los números se escriben como números sin comillas. Puede incluir un componente fraccionario para indicar un número de punto flotante. La mayoría de las implementaciones del análisis JSON asumen un número entero cuando no hay un punto decimal.
- Valores booleanos: valores literales
true
y son compatibles.false
- Nulo:
null
se puede usar un valor literal para indicar un valor vacío o faltante. - matrices. Una matriz es una lista simple encerrada entre corchetes. Cada elemento de la lista está separado por una coma. Las matrices pueden contener cualquier número de elementos y pueden utilizar todos los tipos de datos admitidos.
- Objetos: los objetos se crean con llaves. Este es un conjunto de pares clave-valor, donde las claves son cadenas encerradas entre comillas dobles. Cada clave tiene un valor que puede tomar cualquiera de los tipos de datos disponibles. Puede anidar objetos para crear jerarquías en cascada. Cada valor debe ir seguido de una coma para indicar el final de ese par clave-valor.
Los analizadores JSON convierten automáticamente estos tipos de datos en estructuras apropiadas para su idioma. id
Por ejemplo, no necesita convertir manualmente a un número entero. Analizar toda la cadena JSON es suficiente para mapear los valores al formato de datos original.
Semántica y Validación
JSON tiene ciertas reglas que deben seguirse al codificar datos. Los consumidores no pueden analizar las líneas que no coinciden con la sintaxis.
Es especialmente importante prestar atención a las comillas alrededor de cadenas y claves de objetos. También debe asegurarse de que se use una coma después de cada entrada en un objeto o matriz. Sin embargo, JSON no permite una coma después de la última entrada; la inclusión accidental de una de estas es una causa común de errores de validación. La mayoría de los editores de texto resaltan los problemas de sintaxis para ayudarlo a detectar errores.
A pesar de estos problemas comunes, JSON es uno de los formatos de datos más fáciles de escribir a mano. La mayoría de las personas encuentran la sintaxis rápida y fácil una vez que se familiarizan con ella. En general, JSON es menos propenso a errores que XML, donde las etiquetas de inicio y final no coincidentes, las declaraciones de esquema no válidas y los problemas de codificación a menudo causan problemas.
Notación de contenido JSON
La extensión .json
se usa normalmente cuando JSON se guarda en un archivo. El contenido JSON tiene un tipo MIME estandarizado application/json
, aunque text/json
a veces se usa por motivos de compatibilidad. Actualmente, debe confiar en los encabezados application/json
for Accept
y Content-Type
HTTP.
La mayoría de las API que usan JSON encapsulan todo en un objeto de nivel superior:
Sin embargo, esto no es obligatorio: un tipo literal es válido como nodo de nivel superior en un archivo, por lo que todos los siguientes ejemplos también son válidos para JSON:
Se decodificarán en los escalares correspondientes en su lenguaje de programación.
Trabajando con JSON
La mayoría de los lenguajes de programación tienen soporte integrado para JSON. Aquí se explica cómo interactuar con datos JSON en varios entornos populares.
JavaScript
En JavaScript, los métodos y JSON.stringify()
se JSON.parse()
utilizan para codificar y decodificar cadenas JSON:
PHP
Las funciones equivalentes en PHP son json_encode()
y json_decode()
:
Pitón
Python proporciona json.dumps()
tanto json.loads()
la serialización como la deserialización respectivamente:
Rubí
Rubi JSON.generate
también ofrece JSON.parse
:
Limitaciones de JSON
JSON es un formato liviano enfocado en pasar valores en su estructura de datos. Esto permite un análisis rápido y es fácil trabajar con él, pero significa que hay desventajas que pueden ser frustrantes. Estos son algunos de los mayores problemas.
Sin comentarios
Los datos JSON no pueden incluir comentarios. La falta de anotaciones reduce la claridad y obliga a que la documentación se publique en otro lugar. Esto puede hacer que JSON no sea adecuado para situaciones como archivos de configuración donde los cambios son poco frecuentes y el propósito de los campos puede no estar claro.
Sin esquemas
JSON no le permite definir un esquema para sus datos. id
Por ejemplo, no es posible proporcionar un campo entero obligatorio. Esto puede conducir a la corrupción involuntaria de las estructuras de datos.
Sin enlaces
Los campos no pueden hacer referencia a otros valores en la estructura de datos. Esto a menudo conduce a la repetición, lo que aumenta el tamaño del archivo. Volviendo al ejemplo de publicación de blog del ejemplo anterior, es posible que tenga la siguiente lista de publicaciones de blog:
Ambos mensajes tienen el mismo autor, pero se tuvo que duplicar la información asociada a este objeto. En un mundo ideal, las implementaciones de un analizador JSON podrían producir la estructura que se muestra arriba a partir de una entrada como la siguiente:
Actualmente, esto no es posible con JSON estándar.
Sin tipos de datos extendidos
A los seis tipos de datos admitidos les faltan muchos tipos de valores comunes. JSON no puede almacenar fechas, horas ni ubicaciones geográficas de forma nativa, por lo que deberá elegir su propio formato para esta información.
Esto provoca inconsistencias incómodas y casos extremos. Si su aplicación maneja las marcas de tiempo como cadenas, como 2022-07-01T12:00:00+00:00
, pero una API externa representa las marcas de tiempo como segundos posteriores a la época de Unix 1657287000
, debe recordar cuándo usar cada uno de los formatos.
alternativas JSON
YAML es la principal alternativa a JSON. Es un superconjunto del formato con una representación más legible, tipos de datos personalizados y soporte para enlaces. Está destinado a resolver la mayoría de los problemas de usabilidad asociados con JSON.
YAML se ha generalizado en archivos de configuración, así como en herramientas DevOps, IaC y herramientas de vigilancia. Se usa con menos frecuencia como formato de intercambio de datos para las API. La relativa complejidad de YAML significa que es menos accesible para los principiantes. Pequeños errores de sintaxis pueden causar errores de análisis confusos.
Los búferes de protocolo (protobufs) son otro nuevo competidor de JSON para serializar datos estructurados. Los protobufs tienen declaraciones de tipos de datos, campos obligatorios y soporte para la mayoría de los principales lenguajes de programación. El sistema está ganando popularidad como una forma más eficiente de transferir datos a través de redes.
Resumen
JSON es un formato de representación de datos basado en texto que puede codificar seis tipos diferentes de datos. JSON se ha convertido en la columna vertebral del ecosistema de desarrollo de software; es compatible con todos los principales lenguajes de programación y se ha convertido en la opción predeterminada para la mayoría de las API REST desarrolladas durante las últimas dos décadas.
Si bien la simplicidad de JSON es parte de su popularidad, también impone límites a lo que se puede lograr con el formato. La falta de soporte para esquemas, comentarios, referencias de objetos y tipos de datos personalizados significa que algunas aplicaciones superarán las capacidades de JSON. Las alternativas más jóvenes, como YAML y Protobuf, han ayudado a resolver estos problemas, mientras que XML sigue siendo un competidor para las aplicaciones que desean definir el esquema de datos y no temen la verbosidad.
Deja una respuesta