Leer un archivo JSON y reconstruir el estado completo de una app en Python es clave para la persistencia. Aquí verás cómo implementar un método para cargar datos, instanciar objetos de Biblioteca, LibroFísico, Estudiante y Profesor, y validar campos como ISBN y disponibilidad usando with open, json.load, encoding y append.
¿Cómo cargar y reconstruir el estado de la aplicación desde JSON en Python?
La idea central es leer el archivo y recrear las instancias de tu dominio. En persistencia.py se crea un método para cargar datos que solo recibe self. Se abre el archivo con modo de solo lectura y el mismo encoding con el que se guardó. Luego, se usa json.load para obtener un diccionario con toda la información.
Abrir archivo con with open en modo "r" y mismo encoding.
Convertir el contenido a diccionario con json.load.
Usar las llaves del diccionario para reconstruir Biblioteca, libros y usuarios.
Retornar la instancia de Biblioteca para usarla en main.py.
¿Qué hace el método cargar_datos?
Define un nuevo método: no recibe parámetros extra.
Lee el archivo: usa "r" de read y el encoding correcto.
Carga el JSON a una variable datos: ahora es un diccionario con nombre, usuarios y libros.
Al final retorna la biblioteca creada.
¿Cómo leer el archivo con with open y json.load?
Usa el patrón de contexto y respeta el encoding al leer y escribir para evitar errores con caracteres especiales.
import json
classPersistencia:defcargar_datos(self):withopen(self.archivo,"r", encoding="utf-8")as f: datos = json.load(f)# a partir de aquí se reconstruyen las instancias# y se retorna la biblioteca
¿Cómo recrear libros y usuarios con clases y listas?
Primero se crea una instancia de Biblioteca. Luego se recorre la lista de libros del diccionario y se instancia LibroFísico con las llaves correctas: título, autor, ISBN y disponible. Finalmente, se agrega cada libro a la lista interna con append.
¿Cómo reconstruir libros con su disponibilidad?
Incluir disponibilidad es importante: al guardar, puede que un libro esté marcado como no disponible, y hay que preservarlo.
from biblioteca import Biblioteca
from libros import LibroFisico
biblioteca = Biblioteca(nombre=datos["nombre"])# ejemplo de uso de la llave "nombre"for dato_libro in datos["libros"]: libro = LibroFisico( titulo=dato_libro["titulo"], autor=dato_libro["autor"], isbn=dato_libro["isbn"], disponible=dato_libro["disponible"],) biblioteca.libros.append(libro)
¿Cómo diferenciar estudiantes y profesores al reconstruir usuarios?
En usuarios hay dos tipos: Estudiante y Profesor. La diferencia práctica en los datos es la presencia de la llave "carrera". Si existe, es Estudiante; si no, es Profesor.
from usuarios import Estudiante, Profesor
for dato_usuario in datos["usuarios"]:if"carrera"in dato_usuario: usuario = Estudiante( nombre=dato_usuario["nombre"], cedula=dato_usuario["cedula"], carrera=dato_usuario["carrera"],)else: usuario = Profesor( nombre=dato_usuario["nombre"], cedula=dato_usuario["cedula"],) biblioteca.usuarios.append(usuario)
Diferenciar por llave "carrera" simplifica el flujo.
Una buena práctica adicional sería guardar el tipo explícito en el JSON.
¿Cómo integrar la carga en main.py?
La biblioteca se define desde la función de carga y la guardada se mueve al final de la ejecución para persistir cualquier cambio.
Importar persistencia.
Asignar biblioteca desde cargar_datos.
Ejecutar la app.
Guardar después de los cambios.
¿Qué buenas prácticas y retos quedan pendientes?
El proyecto funciona, pero puede mejorar con manejo de errores y ajustes de persistencia.
Manejo de errores: ¿qué pasa si el archivo no existe al cargar?.
Consistencia: usar siempre el mismo encoding en lectura y escritura.
Limpieza: remover prints de depuración al finalizar.
Extensión de datos: incluir el tipo de usuario en el diccionario.
Verificación rápida: editar biblioteca.json y ver cambios reflejados al ejecutar python main.py.
Si ya lo implementaste, comparte en comentarios cómo resolviste el manejo de errores y qué mejoras sumarías a la persistencia.