¿Por qué los datos en JSON no coinciden con los de un archivo .pickle?

  • Angel Sánchez

    organizador
    10 marzo, 2025 en 12:55 am

    Hola 😀

    El problema es bastante común cuando trabajamos con diferentes formatos de almacenamiento de datos en Python.

    JSON y pickle funcionan de manera diferente:

    • JSON solo puede guardar tipos básicos (diccionarios, listas, textos, números), pero no sabe qué es una “clase” de Python.
    • Pickle es específico de Python y guarda toda la información de los objetos, incluyendo a qué clase pertenecen.

    Cuando guardas objetos de tu clase Patient en JSON, pierden su identidad como instancias de Patient y se convierten en simples diccionarios. Por eso, al compararlos con los objetos guardados en pickle, aparecen como diferentes.

    La solución es crear un sistema para que JSON pueda recordar que esos datos pertenecían a la clase Patient:

    # Cuando guardas en JSON, añade información sobre la clase

    def convertir_patient_a_json(obj):

    if isinstance(obj, Patient):

    return {

    "__class__": "Patient", # Marcador que indica la clase

    "id": obj.id,

    "name": obj.name,

    "surname": obj.surname,

    "age": obj.age,

    "diabetic": obj.diabetic

    }

    raise TypeError(f"No puedo convertir {type(obj)} a JSON")

    # Cuando lees del JSON, reconstruye los objetos Patient

    def reconstruir_patient_desde_json(obj):

    if "__class__" in obj and obj["__class__"] == "Patient":

    return Patient(

    id=obj["id"],

    name=obj["name"],

    surname=obj["surname"],

    age=obj["age"],

    diabetic=obj["diabetic"]

    )

    return obj

    Al usar estas funciones con json.dump() y json.load(), podrás mantener la información de clase al guardar y recuperar datos en formato JSON, haciendo que sean más comparables con los datos guardados en pickle.

    Dime si todo quedó claro o puedo ayudarte en algo más 😀

Inicia sesión para responder.

Start of Discussion
0 de 0 respuestas Junio 2018
Ahora