Serialización de objetos Python a JSON para persistencia de datos
Clase 16 de 17 • Curso de Python Orientado a Objetos
Resumen
La persistencia de datos en Python te permite que una aplicación recuerde su estado entre ejecuciones. Aquí verás cómo serializar objetos a JSON, escribirlos en un archivo y preparar todo para, más adelante, reconstruirlos al cargar. Con una clase central, Persistencia, lograrás guardar nombre, usuarios, libros y una fecha de guardado para auditar cambios.
¿Cómo implementar persistencia de datos con JSON en Python?
La idea clave: convertir objetos Python a formato JSON serializable, escribirlos en un archivo y, en una fase posterior, cargarlos para reconstruir el estado. Es vital manejar errores y validar datos para evitar inconsistencias.
- Serializa estructuras a JSON para almacenamiento seguro.
- Usa archivos .json para persistir entre ejecuciones.
- Prioriza validación y manejo de errores.
¿Qué estructura mínima necesita la clase Persistencia?
Crea un archivo persistencia.py y define una clase que reciba el nombre del archivo. Por defecto, será biblioteca.json. Así centralizas el acceso al almacenamiento.
import json
class Persistencia:
def __init__(self, archivo="biblioteca.json"):
self.archivo = archivo
- Constructor con valor por defecto: biblioteca.json.
- Un único punto de entrada para guardar datos.
¿Cómo escribir el archivo con with open y json.dump?
El context manager with garantiza que el archivo se cierre correctamente. El modo "w" (write) escribe desde cero y el encoding "utf-8" asegura caracteres como eñes y tildes.
def guardar_datos(self, biblioteca):
datos = {}
datos["nombre"] = biblioteca.nombre
with open(self.archivo, "w", encoding="utf-8") as f:
json.dump(datos, f, indent=2, ensure_ascii=False)
- Usa with open(..., "w", encoding="utf-8") as f.
- json.dump admite indent para legibilidad.
- ensure_ascii=False conserva caracteres en español.
¿Cómo guardar usuarios, libros y fecha de guardado?
Además del nombre, es útil persistir las listas de usuarios y libros. Para colecciones de objetos, conviene convertir cada elemento a diccionario, por ejemplo con dict().
¿Cómo convertir objetos a diccionarios con dict?
Aprovecha una lista comprimida para transformar cada elemento de biblioteca.usuarios y biblioteca.libros.
datos = {
"nombre": biblioteca.nombre,
"usuarios": [dict(usuario) for usuario in biblioteca.usuarios],
"libros": [dict(libro) for libro in biblioteca.libros],
}
- Lista comprimida para recorrer colecciones.
- Conversión con dict() para serializar a JSON.
¿Cómo registrar la fecha de guardado?
Agregar una marca de tiempo te permite saber cuándo se persistió el estado, útil para auditoría y recargas futuras.
# Ejemplo conceptual según lo explicado:
# from DateTime import DateTime
# datos["fecha_guardado"] = DateTime.now().ISOFormat()
- Campo fecha_guardado para trazabilidad.
- Sello temporal en ISO format con now.
¿Qué errores y buenas prácticas debes considerar?
Mantén consistencia en nombres de atributos y el idioma del código. Un error típico fue usar biblioteca.name cuando el atributo real era biblioteca.nombre. Evita mezclar idiomas en variables; si eliges español, sé consistente, aunque se recomienda inglés en proyectos reales para evitar tildes en identificadores.
- Verifica atributos: biblioteca.nombre en lugar de name.
- Usa UTF-8 y ensure_ascii=False para textos en español.
- Valida datos y maneja errores al serializar y escribir.
- Comprueba resultados: tras ejecutar, se genera biblioteca.json con el contenido esperado.
- Ejemplos prácticos: cambio de nombre "Platzi Biblioteca" a "B2" y verificación en el .json.
¿Te gustaría que incluyamos la carga desde JSON para reconstruir el estado en tu sistema de biblioteca? Deja tus dudas o casos y continuamos la conversación.