La méthode par défaut pour sérialiser les objets personnalisés et non sérialisables à JSON.Dumps (). Cela se traduit généralement par du code qui ressemble à quelque chose comme ceci:
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))
Cependant, que se passe-t-il si vous souhaitez rendre un objet sérialisable en utilisant l'encodeur par défaut? Malheureusement, il n'y a pas de solution simple offerte par le module JSON.
Malgré les limites du module JSON, il est possible d'atteindre la fonctionnalité souhaitée via une technique appelée singe. Cela implique de modifier le comportement par défaut du module JSON en remplaçant sa méthode par défaut ().
En créant un module qui modifie la méthode jsonencoder.default (), toutes les opérations de sérialisation JSON suivantes seront affectées, car les modules sont mis en cache dans SYS.Modules. Le module autonome suivant montre comment implémenter ce singe-pare-pavet:
import json
def _default(self, obj):
return getattr(obj.__class__, "to_json", _default.default)(obj)
_default.default = JSONEncoder.default
JSONEncoder.default = _default
Pour utiliser ce module de singe, importez-le simplement, et il appliquera automatiquement les modifications au module JSON. Le Jsonencoder vérifiera cette méthode et utilisera sa valeur de retour pour la sérialisation. Cela évite le besoin de méthodes explicites TO_JSON ().
Une autre approche de la sérialisation automatique consiste à utiliser le module Pickle en conjonction avec le jsonencoder JSonenccoder de singe. En remplaçant la méthode par défaut () pour pickle des objets Python qui ne sont pas des types JSON standard, vous pouvez réaliser la sérialisation sans avoir besoin de méthodes de classe spéciale.
pour reconstruire les objets Python originaux de la représentation JSON produite par la sérialisation basée sur des pickle, vous pouvez fournir une fonction d'objet personnalisée_hook pendant pendant la fonction de déssérialisation. Cette fonction peut détecter la clé '_python_object' ajoutée lors de la sérialisation et l'utiliser pour reconstruire l'objet d'origine à l'aide de pickle.loads ().
Bien que le module JSON ne fournisse pas un moyen direct pour rendre les objets JSON sérialisables avec le module par défaut. L'approche Pickle permet la sérialisation automatique de la plupart des objets Python, ce qui en fait une solution plus généralisée.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3