Maison  >  Article  >  développement back-end  >  Comment sérialiser des ensembles avec un encodeur JSON personnalisé en Python ?

Comment sérialiser des ensembles avec un encodeur JSON personnalisé en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 05:17:02189parcourir

How to Serialize Sets with a Custom JSON Encoder in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn