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.
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.
serializing Python Objects con pickle
Deserialization con Pickle
conclusión
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