o método padrão para serializar objetos personalizados e não serializáveis para JSON.DUMPS envolve o JSON (). Isso normalmente resulta em código que se parece mais assim:
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))
no entanto, e se você quiser tornar um objeto serializável usando o codificador padrão? Infelizmente, não há solução direta oferecida pelo módulo JSON. Isso envolve a modificação do comportamento padrão do módulo JSON, substituindo seu método padrão (). O seguinte módulo independente demonstra como implementar este Monkey-Patch:
para utilizar este módulo repugnado de macaco, basta importá-lo e aplicará automaticamente as alterações no módulo JSON. O jsonEncoder verificará esse método e usará seu valor de retorno para serialização. Isso evita a necessidade de métodos explícitos para_json (). Ao substituir o método padrão () para aprisionar objetos Python que não são tipos JSON padrão, você pode obter serialização sem a necessidade de métodos de classe especial. Esta função pode detectar a chave '_python_object' adicionada durante a serialização e usá-la para reconstruir o objeto original usando pickle.loads ().
conclusão
import json
def _default(self, obj):
return getattr(obj.__class__, "to_json", _default.default)(obj)
_default.default = JSONEncoder.default
JSONEncoder.default = _default
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3