32- 馃摝 JSON en Python: Gu铆a B谩sica y Uso Pr谩ctico




Python JSON

馃悕 Python y JSON: El M贸dulo json

Python proporciona un m贸dulo built-in llamado json que facilita trabajar con datos en formato JSON. Este m贸dulo permite realizar dos operaciones principales:

  • Serializaci贸n (Encoding): Convertir objetos de Python a cadenas JSON.
  • Deserializaci贸n (Decoding): Convertir cadenas JSON a objetos de Python.

Importando el M贸dulo json:

Para comenzar a trabajar con JSON en Python, primero necesitas importar el m贸dulo json:

      
import json
      
     

¿Por Qu茅 JSON?

JSON se ha convertido en un est谩ndar para el intercambio de datos en la web debido a sus siguientes caracter铆sticas:

  • Ligero: Tiene una sintaxis m铆nima, lo que resulta en archivos y transmisiones de datos m谩s peque帽os.
  • Legible por Humanos: Su estructura basada en texto es f谩cil de entender.
  • F谩cil de Parsear por M谩quinas: Los lenguajes de programaci贸n tienen bibliotecas para analizar y generar JSON f谩cilmente.
  • Independiente del Lenguaje: JSON es un formato independiente del lenguaje, lo que permite la comunicaci贸n entre sistemas escritos en diferentes lenguajes.

Estructura B谩sica de JSON:

Los datos en JSON se representan principalmente mediante dos estructuras:

  • Objetos: Colecciones de pares clave-valor. Las claves deben ser cadenas y los valores pueden ser de los siguientes tipos: cadena, n煤mero, booleano, otro objeto, array o null. En Python, esto se mapea a un diccionario. Los objetos JSON est谩n encerrados entre llaves {}.
  • Arrays: Listas ordenadas de valores. Los valores pueden ser de los mismos tipos que los valores en un objeto. En Python, esto se mapea a una lista. Los arrays JSON est谩n encerrados entre corchetes [].

Ejemplo de Estructura JSON:

      
{
 "nombre": "Ana",
 "edad": 30,
 "ciudad": "Madrid",
 "hobbies": ["leer", "viajar", "programar"],
 "direccion": {
  "calle": "Gran V铆a, 1",
  "codigo_postal": "28001"
 },
 "es_estudiante": false,
 "cursos": null
}
      
     

En este ejemplo, vemos un objeto JSON que contiene diferentes tipos de valores, incluyendo cadenas, n煤meros, un array, otro objeto, un booleano y un valor null.

En los siguientes temas, aprenderemos c贸mo convertir datos JSON a objetos de Python y viceversa utilizando el m贸dulo json.

JSON in Python

馃悕 JSON en Python: Representaci贸n de Datos

Cuando trabajas con JSON en Python, es importante entender c贸mo los tipos de datos de JSON se mapean a los tipos de datos de Python. El m贸dulo json realiza estas conversiones autom谩ticamente durante la serializaci贸n y deserializaci贸n.

Mapeo de Tipos de Datos JSON a Python:

Cuando deserializas (conviertes de JSON a Python), los tipos de datos JSON se convierten a los siguientes tipos de Python:

JSON Python
object dict (diccionario)
array list (lista)
string str (cadena)
number (integer) int (entero)
number (float) float (flotante)
true True (booleano)
false False (booleano)
null None (NoneType)

Mapeo de Tipos de Datos Python a JSON:

Cuando serializas (conviertes de Python a JSON), los tipos de datos de Python se convierten a los siguientes tipos de JSON:

Python JSON
dict object
list, tuple array
str string
int, float number
True true
False false
None null

Trabajando con el M贸dulo json:

El m贸dulo json proporciona principalmente dos pares de funciones para realizar la serializaci贸n y deserializaci贸n:

  • json.loads(): Deserializa una cadena JSON a un objeto de Python.
  • json.load(): Deserializa un archivo o un objeto similar a un archivo que contiene datos JSON a un objeto de Python.
  • json.dumps(): Serializa un objeto de Python a una cadena JSON.
  • json.dump(): Serializa un objeto de Python a un archivo o un objeto similar a un archivo en formato JSON.

En los siguientes temas, veremos ejemplos pr谩cticos de c贸mo usar estas funciones para analizar (parsear) JSON y convertir desde Python a JSON.

Parse JSON - Convert from JSON to Python

⚙️ Parsear JSON: De JSON a Objetos Python

Usando json.loads(): Analizar una Cadena JSON

La funci贸n json.loads() se utiliza para analizar una cadena que contiene datos en formato JSON y convertirla a un objeto de Python (generalmente un diccionario o una lista).

      
import json

cadena_json = '{ "nombre":"Carlos", "edad":35, "ciudad":"Barcelona"}'

# Analizar la cadena JSON
objeto_python = json.loads(cadena_json)

# El resultado es un diccionario de Python
print(objeto_python)
print(type(objeto_python))

# Acceder a los valores del diccionario
print(objeto_python["nombre"])
print(objeto_python["edad"])
print(objeto_python["ciudad"])
      
     

Al ejecutar este c贸digo, la variable objeto_python contendr谩 un diccionario de Python con las claves y valores correspondientes a la cadena JSON.

Usando json.load(): Analizar un Archivo JSON

La funci贸n json.load() se utiliza para leer datos desde un archivo (o un objeto similar a un archivo) que contiene formato JSON y convertirlo a un objeto de Python.

Primero, necesitar铆as tener un archivo con contenido JSON (por ejemplo, datos.json):

Contenido de datos.json:
      
{
 "empleados": [
  {"nombre": "Elena", "departamento": "Ventas"},
  {"nombre": "Javier", "departamento": "Marketing"}
 ]
}
      
     

Ahora, el c贸digo Python para leer y analizar este archivo ser铆a:

      
import json

# Abrir el archivo JSON en modo lectura ('r')
with open('datos.json', 'r') as archivo:
    # Cargar los datos JSON desde el archivo
    datos_python = json.load(archivo)

# El resultado es un diccionario de Python
print(datos_python)
print(type(datos_python))

# Acceder a los datos
empleados = datos_python["empleados"]
for empleado in empleados:
    print(f"Nombre: {empleado['nombre']}, Departamento: {empleado['departamento']}")
      
     

Es importante utilizar la sentencia with open(...) para asegurarse de que el archivo se cierre correctamente despu茅s de su uso.

Con estas funciones, puedes f谩cilmente convertir datos JSON que provienen de APIs, archivos de configuraci贸n o cualquier otra fuente a estructuras de datos nativas de Python con las que puedes trabajar de manera eficiente.

En el siguiente tema, veremos c贸mo realizar la operaci贸n inversa: convertir objetos de Python a formato JSON.

Convert from Python to JSON

➡️ Convertir de Python a JSON

Usando json.dumps(): Convertir un Objeto Python a una Cadena JSON

La funci贸n json.dumps() se utiliza para convertir un objeto de Python (como un diccionario o una lista) en una cadena que representa ese objeto en formato JSON.

      
import json

# Un diccionario de Python
diccionario_python = {
    "nombre": "Elena",
    "edad": 28,
    "ciudad": "Sevilla",
    "hobbies": ["pintar", "bailar"],
    "tiene_mascotas": True,
    "cursos_completados": None
}

# Convertir el diccionario a una cadena JSON
cadena_json = json.dumps(diccionario_python)

# El resultado es una cadena JSON
print(cadena_json)
print(type(cadena_json))

# Tambi茅n podemos convertir una lista de Python a una cadena JSON
lista_python = [1, 2, "tres", True, None]
cadena_json_lista = json.dumps(lista_python)
print(cadena_json_lista)
print(type(cadena_json_lista))
      
     

Al ejecutar este c贸digo, cadena_json contendr谩 una representaci贸n en formato JSON del diccionario de Python, y cadena_json_lista contendr谩 la representaci贸n JSON de la lista.

Usando json.dump(): Convertir un Objeto Python a un Archivo JSON

La funci贸n json.dump() se utiliza para escribir un objeto de Python a un archivo (o un objeto similar a un archivo) en formato JSON.

      
import json

# Un diccionario de Python
datos_a_guardar = {
    "usuarios": [
        {"id": 1, "nombre": "Sof铆a"},
        {"id": 2, "nombre": "Mateo"}
    ]
}

# Abrir un archivo en modo escritura ('w')
with open('usuarios.json', 'w') as archivo:
    # Escribir el diccionario al archivo en formato JSON
    json.dump(datos_a_guardar, archivo)

print("Los datos han sido guardados en usuarios.json")
      
     

Este c贸digo crear谩 un archivo llamado usuarios.json (si no existe) y escribir谩 el contenido del diccionario datos_a_guardar en formato JSON dentro de ese archivo.

Al igual que con json.load(), es importante utilizar with open(...) para asegurar el manejo adecuado del archivo.

Con estas funciones, puedes f谩cilmente convertir tus estructuras de datos de Python a formato JSON para guardarlas en archivos, enviarlas a trav茅s de la red, o cualquier otra necesidad de intercambio de datos.

En los siguientes temas, exploraremos c贸mo formatear la salida JSON para hacerla m谩s legible y c贸mo ordenar los resultados.

Format the Result

✨ Formateando el Resultado JSON

El Par谩metro indent: Indentaci贸n para Legibilidad

El par谩metro indent en las funciones json.dumps() y json.dump() se utiliza para especificar el n煤mero de espacios a utilizar para la indentaci贸n. Esto hace que la estructura del JSON sea mucho m谩s f谩cil de leer por humanos.

      
import json

datos = {
    "nombre": "Ricardo",
    "edad": 40,
    "direccion": {
        "calle": "Avenida Principal, 50",
        "ciudad": "Valencia"
    },
    "hobbies": ["correr", "cocinar"],
    "es_activo": True
}

# Sin indentaci贸n (formato compacto)
json_sin_indentar = json.dumps(datos)
print("JSON sin indentar:")
print(json_sin_indentar)
print("-" * 30)

# Con indentaci贸n de 4 espacios
json_indentado = json.dumps(datos, indent=4)
print("JSON con indentaci贸n de 4 espacios:")
print(json_indentado)

# Tambi茅n se puede usar un car谩cter diferente para la indentaci贸n, como un tabulador
json_indentado_tab = json.dumps(datos, indent='\t')
print("-" * 30)
print("JSON con indentaci贸n de tabulador:")
print(json_indentado_tab)

# Al escribir a un archivo, tambi茅n se usa el par谩metro indent
with open('datos_formateados.json', 'w') as archivo:
    json.dump(datos, archivo, indent=2)
print("-" * 30)
print("Datos guardados en datos_formateados.json con indentaci贸n de 2 espacios.")
      
     

Como puedes ver, la salida con indentaci贸n es mucho m谩s f谩cil de leer y entender, especialmente cuando los datos JSON tienen varios niveles de anidaci贸n.

Otros Par谩metros de Formato:

  • separators: Permite especificar los separadores utilizados en el JSON. Por defecto son (', ', ': '). Puedes modificarlos para obtener un formato m谩s compacto (por ejemplo, (',', ':')).
  • sort_keys: Si se establece en True, los 泻谢褞褔懈 de los diccionarios se ordenar谩n alfab茅ticamente en la salida JSON. Veremos esto en el siguiente tema.

Ejemplo con separators:

      
import json

datos = {"manzana": 1, "banana": 2, "cereza": 3}

# Formato por defecto
json_default_separators = json.dumps(datos)
print(f"Por defecto: {json_default_separators}")

# Formato m谩s compacto
json_compact_separators = json.dumps(datos, separators=(',', ':'))
print(f"Compacto: {json_compact_separators}")
      
     

El par谩metro separators puede ser 煤til si necesitas minimizar el tama帽o del archivo JSON.

Formatear la salida JSON es crucial para la legibilidad y el mantenimiento de tus archivos y datos. El par谩metro indent es el m谩s com煤nmente utilizado para este prop贸sito.

En el siguiente tema, aprenderemos c贸mo ordenar los resultados JSON por clave.

Order the Result

馃棟️ Ordenando el Resultado JSON

El Par谩metro sort_keys: Orden Alfab茅tico de las Claves

El par谩metro sort_keys en las funciones json.dumps() y json.dump() se utiliza para especificar si las claves de los diccionarios deben ordenarse alfab茅ticamente en la salida JSON. Por defecto, su valor es False.

      
import json

datos_desordenados = {
    "z": 10,
    "a": 20,
    "m": 30,
    "b": 40
}

# Sin ordenar las claves (orden original del diccionario, que puede variar en Python < 3.7)
json_sin_ordenar = json.dumps(datos_desordenados)
print("JSON sin ordenar:")
print(json_sin_ordenar)
print("-" * 30)

# Ordenando las claves alfab茅ticamente
json_ordenado = json.dumps(datos_desordenados, sort_keys=True)
print("JSON con claves ordenadas:")
print(json_ordenado)

# Tambi茅n se puede combinar con la indentaci贸n
json_ordenado_indentado = json.dumps(datos_desordenados, sort_keys=True, indent=4)
print("-" * 30)
print("JSON con claves ordenadas e indentaci贸n:")
print(json_ordenado_indentado)

# Al escribir a un archivo, tambi茅n se usa el par谩metro sort_keys
with open('datos_ordenados.json', 'w') as archivo:
    json.dump(datos_desordenados, archivo, sort_keys=True, indent=2)
print("-" * 30)
print("Datos guardados en datos_ordenados.json con claves ordenadas e indentaci贸n.")
      
     

Como puedes ver, al establecer sort_keys=True, las claves del diccionario en la salida JSON se ordenan alfab茅ticamente. Esto puede ser 煤til para facilitar la comparaci贸n de archivos JSON o para mejorar la legibilidad en ciertos casos.

Consideraciones sobre el Orden:

  • En Python 3.7 y posteriores, los diccionarios recuerdan el orden de inserci贸n de los elementos. Sin embargo, al serializar a JSON, este orden no est谩 garantizado a menos que se utilicen extensiones espec铆ficas o se ordene expl铆citamente.
  • El par谩metro sort_keys=True asegura un orden consistente basado en las claves, independientemente de la versi贸n de Python o del orden de inserci贸n original.

Ordenar las claves puede ser una pr谩ctica 煤til para la consistencia y la legibilidad en tus archivos y datos JSON.

Con esto, hemos cubierto los aspectos fundamentales para trabajar con JSON en Python. ¿Tienes alguna pregunta sobre el ordenamiento o sobre alg煤n otro tema de JSON que hayamos visto?




Publicar un comentario

0 Comentarios