Skip to content

JSON

JSON es un formato de intercambio de datos ligero y fácil de leer, que se utiliza ampliamente para almacenar y transmitir datos estructurados. Es un formato basado en texto que utiliza una sintaxis similar a la de los objetos en JavaScript, lo que lo hace fácil de entender y manipular.

Estructura de un archivo JSON

Un archivo JSON está compuesto por una serie de pares clave-valor:

{
  "clave1": "valor1",
  "clave2": 42,
  "clave3": true,
  "clave4": {
    "subclave1": "subvalor1",
    "subclave2": [1, 2, 3]
  },
  "clave5": ["elemento1", "elemento2"]
}

Un ejemplo mas realista:

{
    "nombre": "datadiego",
    "edad": 35,
    "administrador": true,
    "intereses": ["coding", "videojuegos", "linux"],
    "direccion": {
        "calle": "Calle Falsa",
        "numero": 123,
        "ciudad": "Madrid",
        "pais": "España"
    },
}

Características de JSON

  • Legible por humanos: La sintaxis es clara y fácil de entender.
  • Ligero: JSON es un formato compacto, lo que lo hace eficiente para el almacenamiento y la transmisión de datos.
  • Compatible con muchos lenguajes: La mayoría de los lenguajes de programación modernos tienen bibliotecas para trabajar con JSON, lo que facilita su uso en diversas aplicaciones.
  • Estructurado: Permite representar datos complejos mediante objetos y arreglos, lo que facilita la organización de la información.
  • Intercambio de datos: JSON es ampliamente utilizado para el intercambio de datos entre aplicaciones, especialmente en aplicaciones web y servicios RESTful.

JSON tiene algunos aspectos negativos:

  • No soporta comentarios: A diferencia de otros formatos como YAML, JSON no permite comentarios, lo que puede dificultar la documentación de los datos.
  • Tipos de datos limitados: JSON solo admite ciertos tipos de datos, como cadenas, números, booleanos, objetos y arreglos. No admite tipos de datos más complejos como fechas o funciones.
  • No es un lenguaje de programación: Aunque JSON es similar a la sintaxis de objetos en JavaScript, no es un lenguaje de programación completo. No admite estructuras de control de flujo, funciones o variables, lo que limita su capacidad para realizar operaciones complejas directamente en el formato JSON.
  • No escala bien para grandes volúmenes de datos: Aunque JSON es eficiente para el almacenamiento y la transmisión de datos, puede volverse ineficiente cuando se trata de grandes volúmenes de datos, ya que su estructura basada en texto puede aumentar significativamente el tamaño del archivo.

Uso de JSON

JSON se utiliza en una amplia variedad de aplicaciones, especialmente en el desarrollo web y móvil. Algunos de los usos más comunes incluyen:

  • Intercambio de datos entre cliente y servidor: JSON se utiliza para enviar y recibir datos entre aplicaciones web y servidores, especialmente en aplicaciones basadas en AJAX.
  • Almacenamiento de configuración: Muchas aplicaciones utilizan archivos JSON para almacenar configuraciones y preferencias del usuario, ya que es fácil de leer y modificar.
  • APIs RESTful: JSON es el formato de datos más comúnmente utilizado en APIs RESTful, lo que permite a las aplicaciones comunicarse de manera eficiente y estandarizada.
  • Bases de datos NoSQL: Muchas bases de datos NoSQL, como MongoDB, utilizan JSON como formato de almacenamiento para documentos.

Dependiendo del contexto, JSON puede ser una excelente opción para almacenar y transmitir datos. Sin embargo, es importante considerar sus limitaciones y evaluar si es el formato adecuado para tus necesidades específicas.

jq

jq es una herramienta de línea de comandos para procesar y manipular datos JSON.

Vamos a partir de un ejemplo como el siguiente:

{
    "nombre": "datadiego",
    "edad": 35,
    "administrador": true,
    "intereses": ["coding", "videojuegos", "linux"],
    "direccion": {
        "calle": "Calle Falsa",
        "numero": 123,
        "ciudad": "Madrid",
        "pais": "España"
    }
}

Podemos utilizar jq para extraer información específica de este JSON.

datadiego@/tmp cat usuario.json | jq
{
  "nombre": "datadiego",
  "edad": 35,
  "administrador": true,
  "intereses": [
    "coding",
    "videojuegos",
    "linux"
  ],
  "direccion": {
    "calle": "Calle Falsa",
    "numero": 123,
    "ciudad": "Madrid",
    "pais": "España"
  }
}
datadiego@/tmp cat usuario.json | jq "keys"
[
  "administrador",
  "direccion",
  "edad",
  "intereses",
  "nombre"
]
datadiego@/tmp cat usuario.json | jq ".direccion"
{
  "calle": "Calle Falsa",
  "numero": 123,
  "ciudad": "Madrid",
  "pais": "España"
}
datadiego@/tmp cat usuario.json | jq ".direccion.calle"
"Calle Falsa"
datadiego@/tmp cat usuario.json | jq ".direccion.numero"
123
datadiego@/tmp cat usuario.json | jq ".direccion.ciudad"
"Madrid"
datadiego@/tmp cat usuario.json | jq ".intereses"
[
  "coding",
  "videojuegos",
  "linux"
]
datadiego@/tmp cat usuario.json | jq ".intereses.[0]"
"coding"

También acepta pasarlo directamente como argumento:

datadiego@/tmp jq "keys" usuario.json 
[
  "administrador",
  "direccion",
  "edad",
  "intereses",
  "nombre"
]
datadiego@/tmp jq ".direccion" usuario.json 
{
  "calle": "Calle Falsa",
  "numero": 123,
  "ciudad": "Madrid",
  "pais": "España"
}

JSON y Python

Manipular JSON en Python es bastante sencillo gracias al módulo json incluido en la biblioteca estándar.

import json
import requests

# Llamada a la API de GitHub
response = requests.get("https://api.github.com/users/datadiego")
data = response.json()

# Extraer datos específicos
print(data.keys())
username = data["login"]
followers = data["followers"]
repos_url = data["repos_url"]
print(f"El usuario {username} tiene {followers} seguidores y su URL de repositorios es {repos_url}.")

En python, para acceder a los datos de un objeto JSON, lo tratamos como un diccionario, accediendo con notación por clave.

Por ejemplo, data["login"] nos da el nombre de usuario, data["followers"] nos da el número de seguidores, y así sucesivamente.

Python NO tiene notación de punto para acceder a los datos de un JSON, siempre se accede por clave entre corchetes.

JSON y JavaScript

Manipular JSON en JavaScript es muy común, recuerda que JSON es un subconjunto de la sintaxis de objetos en JavaScript.

// Llamada a la API de GitHub
fetch("https://api.github.com/users/datadiego")
  .then(response => response.json())
  .then(data => {
    // Extraer datos específicos
    console.log(Object.keys(data));
    const username = data["login"];
    const followers = data.followers;
    const reposUrl = data.repos_url;
    console.log(`El usuario ${username} tiene ${followers} seguidores y su URL de repositorios es ${reposUrl}.`);
  })
  .catch(error => console.error("Error:", error));

JavaScript nos permite acceder a los datos de un objeto JSON utilizando tanto la notación de corchetes como la notación de punto. Por ejemplo, data.login o data["login"] nos darán el nombre de usuario.