"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo hacer objetos personalizados JSON Serializable usando el codificador predeterminado en Python?

¿Cómo puedo hacer objetos personalizados JSON Serializable usando el codificador predeterminado en Python?

Publicado el 2025-03-25
Navegar:642

How can I make custom objects JSON serializable using the default encoder in Python?

haciendo objetos JSON Serializable con el codificador predeterminado

El método predeterminado para serializar objetos personalizables, no serializables a JSON implica subclasificar JSON.JSONENDER y pasar un codificador personalizado a JSON.DUMPS (). Esto típicamente da como resultado un código que se parece a esto:

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Foo):
            return obj.to_json()

        return json.JSONEncoder.default(self, obj)

print(json.dumps(obj, cls=CustomEncoder))

Sin embargo, ¿qué pasa si desea hacer un objeto serializable usando el codificador predeterminado? Desafortunadamente, no hay una solución sencilla ofrecida por el módulo JSON.

usando el parche de mono para la codificación predeterminada

a pesar de las limitaciones del módulo JSON, es posible lograr la funcionalidad deseada a través de una técnica llamada emparejamiento de mono. Esto implica modificar el comportamiento predeterminado del módulo JSON reemplazando su método predeterminado ().

creando un módulo que modifica el método jsonEncoder.default (), todas las operaciones de serialización JSON posteriores se verán afectadas, ya que los módulos se almacenan en caché en las sys.modules. El siguiente módulo independiente demuestra cómo implementar este parche de mono:

import json

def _default(self, obj):
    return getattr(obj.__class__, "to_json", _default.default)(obj)

_default.default = JSONEncoder.default
JSONEncoder.default = _default

para utilizar este módulo empapado de mono, simplemente importarlo, y aplicará automáticamente los cambios al módulo JSON.

agregando un método especial para la serialización de objetos

para obtener la serialización automática de JSON de sus clases personalizadas personalizadas. El JSONEncoder verificará este método y usará su valor de retorno para la serialización. Esto evita la necesidad de métodos explícitos de to_json ().

serializing Python Objects con pickle

Otro enfoque para la serialización automática es usar el módulo de pickle junto con el Jsonencoder de mono. Al anular el método predeterminado () a los objetos de Python Pickle que no son tipos JSON estándar, puede lograr la serialización sin la necesidad de métodos de clase especiales.

Deserialization con Pickle

para reconstruir objetos de Python originales de la representación JSON producida por la serialización basada en Pickle, puede proporcionar un objeto personalizado durante la función de la deserialización original de la deserialización. Esta función puede detectar la tecla '_python_object' agregada durante la serialización y usarla para reconstruir el objeto original usando pickle.loads ().

conclusión

mientras que el módulo JSON no proporciona una forma directa de hacer que los objetos es serializables con el codificador predeterminado, es posible que logre esto a través de un mono de mono o no proporciona el modulador directo. El enfoque de Pickle permite la serialización automática de la mayoría de los objetos de Python, lo que lo convierte en una solución más generalizada.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3