"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso tornar os objetos personalizados JSON serializável usando o codificador padrão no Python?

Como posso tornar os objetos personalizados JSON serializável usando o codificador padrão no Python?

Postado em 2025-03-25
Navegar:589

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

tornando os objetos json serializável com o codificador padrão

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:

importar json def _default (self, obj): Retornar getattr (obj .__ classe__, "to_json", _default.default) (obj) _Default.Default = JSonencoder.Default JSonencoder.Default = _Default

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
Tutorial mais recente Mais>

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