Maison > Article > développement back-end > Comment surmonter les limitations de sérialisation JSON par défaut avec des méthodes personnalisées ?
Surmonter les limitations de sérialisation par défaut avec des méthodes personnalisées
Dans la sérialisation JSON par défaut, l'utilisation du JSONEncoder intégré est souvent l'approche la plus pratique. Cependant, pour les objets personnalisés qui n'héritent pas de types sérialisables, cela peut être difficile.
Monkey-Patching the Default Encoder
Au lieu de sous-classer JSONEncoder, nous pouvons modifiez son comportement en modifiant la méthode par défaut à l'aide de Monkey-Patching. Cela nous permet d'ajouter une logique spéciale qui recherche une méthode to_json dans l'objet et l'utilise pour l'encodage si disponible.
Exemple : Utilisation d'une méthode spéciale pour la sérialisation
<code class="python">import json # Module for monkey-patching def _default(self, obj): return getattr(obj.__class__, "to_json", _default.default)(obj) _default.default = JSONEncoder.default JSONEncoder.default = _default class Foo: def __init__(self, name): self.name = name def to_json(self): return '{"name": "%s"}' % self.name foo = Foo('sazpaz') json_str = json.dumps(foo)</code>
Cette approche nous permet de sérialiser des objets personnalisés sans avoir à implémenter d'encodeurs personnalisés.
Automatiser la sérialisation avec Pickle
Pour encore plus de flexibilité, nous pouvons utiliser le module pickle en conjonction avec le patching des singes. En créant une méthode par défaut personnalisée qui sélectionne les types JSON non standard, nous pouvons les sérialiser automatiquement.
<code class="python"># Module for pickle-based serialization from json import JSONEncoder import pickle def _default(self, obj): return {'_python_object': pickle.dumps(obj)} JSONEncoder.default = _default</code>
Cela nous permet de sérialiser les classes définies par l'utilisateur, y compris les structures de données complexes.
Remarque : Pour la désérialisation, nous pouvons fournir un object_hook personnalisé pour reconstruire les objets Python à partir des données marinées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!