¿Qué es JSON?

Publicado por

Hoy en día muchos sistemas, sobre todo aquellos que funcionan en "la nube", dependen del trabajo conjunto entre varias entidades. Esta clase de cooperación no es posible sin un apropiado intercambio de información entre los participantes, típicamente a través del paso de mensajes, que deben estructurarse de tal manera que:

  1. Se codifiquen en un formato legible por todos los participantes
  2. Se apeguen a un esquema previamente acordado entre los componentes involucrados
  3. Su contenido sea fidedigno a ambos lados del medio de comunicación

El intercambio de información, ya sea a través de intercambio de mensajes o del almacenamiento de datos consiste en serializar la información para después transmitirla o escribirla en un medio persistente. Y es en esta parte en donde JSON entra en escena.

JSON es un formato abierto de representación e intercambio de objetos, popularizado a principios de siglo por Douglas Crockford como una alternativa ligera a XML.

Una de sus principales ventajas es que permite intercambiar datos estructurados entre diferentes programas y medios de almacenamiento independientemente del lenguaje de programación en que estén desarrollados. Además de todo, es fácil de generar y leer tanto por máquinas como por humanos.

Los tipos de dato que se pueden serializar con JSON son:

Primitivos

  • Cadena: "esto es una cadena"
  • Números: 10, 3.141592, 6.022e23
  • Constante true, false y null

Además de las estructuras:

Arreglos

Son colecciones ordenadas de valores, encerradas entre corchetes. Los valores pueden ser de cualquier tipo de los listados arriba, incluyendo otros arreglos e incluso objetos.

Los siguientes son ejemplos de arreglos válidos:

[1, 2, 3]

["valor tipo cadena", 2, false, true, null]

[6.022e23, ["una cadena", "otra cadena"], true]

Objetos

Son secuencias de pares clave: valor encerradas entre llaves, los valores pueden ser de cualquiera de los tipos soportados, incluyendo otros objetos:

{
  "mensaje": "Hola mundo",
  "destinatario": {
    "nombre": "Ignacio Ramírez",
    "apodo": "nigromante",
    "correo": "nigromante@codingornot.com"
  },
  "contactos": [
    {
      "nombre": "Pedro Moreno",
      "apodo": "peter_brown",
      "correo": "pedro.moreno@codingornot.com"
    }
  ]
}

Ejemplo

Considera los siguientes dos programas independientes, la idea es que ambos compartan información mediante un archivo de datos en formato JSON:

Captura de datos

#!/usr/bin/env python3

import json


def lee(propiedad):
    return input(f'{propiedad:10}: ')


propiedades = 'nombre', 'edad', 'correo'
registro = {}

for propiedad in propiedades:
    registro[propiedad] = lee(propiedad)

with open('datos.json', 'w') as datos:
    datos.write(
        json.dumps(registro)
    )

Este programa lee de la entrada estándar una serie de propiedades y las almacena en un objeto. Una vez construido el objeto, utiliza una rutina de la biblioteca estándar de Python para codificar ese objeto en un archivo con formato JSON. Al final de la ejecución del programa, los datos han sido almacenados en el archivo de texto datos.json.

Recuperación de datos

#!/usr/bin/env python3

import json


def imprime(primera_columna, segunda_columna):
    print(f'{primera_columna:10}  {segunda_columna}')


with open('datos.json') as datos:
    registro = json.load(datos)

imprime('PROPIEDAD', 'VALOR')
for propiedad, valor in registro.items():
    imprime(propiedad, valor)

El otro programa, busca el archivo datos.json generado por el script anterior y utiliza otra rutina de la biblioteca estándar para interpretar su contenido y reconstruir el objeto almacenado en éste. Después de haber recuperado los datos, el programa los despliega en la salida estándar.


Como puedes observar en la demostración anterior, el soporte para generar y leer datos serializados en formato JSON ya está disponible en el conjunto de bibliotecas estándar, en este caso de Python, y lo mejor de todo es que resulta muy sencillo de utilizar. Este es el caso para un gran número de lenguajes, por lo que puedes compartir datos entre distintos programas independientemente del lenguaje o la tecnología en que estén desarrollados.


Imagen de portada tomada de pixabay.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *