Maison > Article > développement back-end > Comment sérialiser des ensembles avec un encodeur JSON personnalisé en Python ?
Ensembles de sérialisation JSON
Votre défi vient du fait que l'encodage JSON génère une erreur lors de la rencontre d'ensembles, car ils ne sont pas intrinsèquement JSON sérialisable. Pour surmonter ce problème, nous pouvons créer un encodeur JSON personnalisé.
Considérons l'exemple suivant :
import json class SetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return json.JSONEncoder.default(self, obj)
Ici, la classe SetEncoder étend json.JSONEncoder et inclut une méthode par défaut personnalisée. Lorsqu'un objet est transmis à l'encodeur, cette méthode détermine comment le gérer. S'il s'agit d'un ensemble, la méthode renvoie une liste de ses éléments. Sinon, il délègue le processus d'encodage au JSONEncoder d'origine.
En utilisant cet encodeur personnalisé, vous pouvez sérialiser les ensembles JSON comme suit :
data_str = json.dumps(set([1, 2, 3, 4, 5]), cls=SetEncoder) print(data_str)
Ce code affichera :
'[1, 2, 3, 4, 5]'
Gestion des objets complexes et des valeurs imbriquées
Comme vous l'avez mentionné, vos objets peuvent contenir des valeurs imbriquées qui doivent également être sérialisées. À cette fin, vous pouvez étendre la méthode par défaut pour prendre en compte des types supplémentaires et leur sérialisation personnalisée.
Par exemple, disons que vous avez une classe appelée Something que vous souhaitez représenter lors de la sérialisation. Vous pouvez ajouter ce qui suit à la méthode par défaut :
if isinstance(obj, Something): return 'CustomSomethingRepresentation'
Maintenant, lorsqu'un objet de type Something est rencontré, l'encodeur renverra la valeur 'CustomSomethingRepresentation'.
De cette façon, vous pouvez créer un encodeur complet qui gère différents types de données et valeurs imbriquées selon vos besoins, garantissant ainsi une sérialisation JSON réussie.
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!