10.6. Módulo json

Nota

Propósito: usar el módulo que incorpora Python para codificar y decodificar JavaScript Object Notation (JSON).

El módulo json expone una API familiar a los usuarios de los módulos de la biblioteca estándar marshal y pickle. Este le permite codificar objetos de Python como cadenas en formato JSON y decodifiquelas en objetos de Python.

Además proporciona una API similar al módulo pickle para convertir objetos de Python en memoria a una representación serializada conocida como JavaScript Object Notation (JSON).

10.6.1. Práctica - Caso real

A continuación se presenta una práctica más real de implementar el uso de proyectos con el módulo json para leer y escribir un archivo JSON basado en un tipo diccionario:

10.6.2. Estructura de archivos

Para crear la estructura de archivos del proyecto JSON debe ejecutar los siguientes comandos:

Crear y acceder al directorio json en un solo comando, ejecutando el siguiente comando:

mkdir -p ~/proyectos/json && cd $_

El comando anterior crea la siguiente estructura de directorios:

proyectos/
└── json/

Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.

A continuación se presenta y explica el uso de cada archivo para este proyecto:

Archivo json_reading_writing.py

Módulo de principal del programa.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""Programa para escribir y leer un archivo JSON"""

import json
import logging
import os

logging.basicConfig(level=logging.INFO)

# Ruta del archivo
RUTA = os.path.join(os.path.dirname(os.path.abspath(__file__)))
# Nombre de archivo JSON
ARCHIVO_JSON = "clientes.json"
# Data a escribir
clientes_data = {
    "clientes": [
        {
            "nombre": "Leonardo",
            "apellido": "Caballero",
            "codigo_postal": "5001",
            "telefono": "+58-412-4734567",
        },
        {
            "nombre": "Ana",
            "apellido": "Poleo",
            "codigo_postal": "6302",
            "telefono": "+58-426-5831297",
        },
        {
            "nombre": "Manuel",
            "apellido": "Matos",
            "codigo_postal": "4001",
            "telefono": "+58-414-2360943",
        },
    ]
}


try:
    # Abriendo archivo para escribir un tipo diccionario 'clientes_data'
    with open(
        os.path.join(RUTA, ARCHIVO_JSON), mode="w", encoding="utf-8"
    ) as json_nuevo:
        json.dump(clientes_data, json_nuevo)
        # Cerrar el archivo después de escribirlo
        json_nuevo.close()
        logging.info(f"✅ Se escribió el archivo JSON '{ARCHIVO_JSON}'.\n")
    # Abrir el archivo en modo lectura
    with open(os.path.join(RUTA, ARCHIVO_JSON), encoding="utf-8") as json_leido:
        # Leyendo desde archivo JSON
        data = json.load(json_leido)
        for cliente in data["clientes"]:
            print(f"📜 Nombre:", cliente["nombre"])
            print(f"📜 Apellido:", cliente["apellido"])
            print(f"📜 Código postal:", cliente["codigo_postal"])
            print(f"📜 Teléfono:", cliente["telefono"])
            print(f"📜 Datos detallados: {cliente}\n")
        # Cerrar el archivo después de leerlo
        json_leido.close()
        logging.info(f"✅ Se leyó el archivo JSON '{ARCHIVO_JSON}'.")
except FileNotFoundError as e:
    print(f"❌ Error: No se encontró el archivo: {e}")
except Exception as e:
    print(f"❌ Error inesperado: {e}")

Importante

Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:

Truco

Para ejecutar el código json_reading_writing.py, abra una consola de comando, acceda al directorio donde se encuentra el programa:

proyectos/
└── json/
    └── json_reading_writing.py

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

python3 json_reading_writing.py

El anterior código al ejecutar debe mostrar el siguiente mensaje:

INFO:root:✅ Se escribió el archivo JSON 'clientes.json'.

📜 Nombre: Leonardo
📜 Apellido: Caballero
📜 Código postal: 5001
📜 Teléfono: +58-412-4734567
📜 Datos detallados: {'nombre': 'Leonardo', 'apellido': 'Caballero', 'codigo_postal': '5001', 'telefono': '+58-412-4734567'}

📜 Nombre: Ana
📜 Apellido: Poleo
📜 Código postal: 6302
📜 Teléfono: +58-426-5831297
📜 Datos detallados: {'nombre': 'Ana', 'apellido': 'Poleo', 'codigo_postal': '6302', 'telefono': '+58-426-5831297'}

📜 Nombre: Manuel
📜 Apellido: Matos
📜 Código postal: 4001
📜 Teléfono: +58-414-2360943
📜 Datos detallados: {'nombre': 'Manuel', 'apellido': 'Matos', 'codigo_postal': '4001', 'telefono': '+58-414-2360943'}

INFO:root:✅ Se leyó el archivo JSON 'clientes.json'.

La ejecucion anterior generar la siguiente estructura:

proyectos/
└── json/
    ├── clientes.json
    └── json_reading_writing.py

Archivo clientes.json

Archivo en formato JSON llamado clientes.json la cual no se incluye ya que cada vez que se inicia el programa json_reading_writing.py se sustituye y crea nuevamente, para cuidar la creación de los datos iniciales.

Así de esta forma puede leer y escribir registros en un archivo JSON usando el módulo json.


Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.



¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. UTM - Madrid, España.

La hora aquí es actualmente 7:35 PM UTM.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional