1041 votes

Python : Comment faire une classe JSON sérialisable

Donc, voilà la question :
Comment créer une classe sérialisable ?

une classe simple :

Que dois-je faire pour être en mesure d’obtenir la production de :

sans une erreur ( `` )

737voto

Onur Yıldırım Points 5566

Voici une solution simple pour une fonctionnalité simple :

``Méthode

Au lieu d’une classe sérialisable JSON, implémentez une méthode de sérialiseur :

Si vous appelez simplement pour sérialiser :

affichera :

649voto

Manoj Govindan Points 24030

Avez-vous une idée sur les résultats attendus? Pour, par exemple, cela fera?

>>> f  = FileItem("/foo/bar")
>>> magic(f)
'{"fname": "/foo/bar"}'

Dans ce cas, vous pouvez simplement appeler json.dumps(f.__dict__).

Si vous voulez plus de sortie personnalisé, puis vous aurez à la sous-classe JSONEncoder et de mettre en œuvre votre propre sérialisation personnalisée.

Pour un exemple trivial, voir ci-dessous.

>>> from json import JSONEncoder
>>> class MyEncoder(JSONEncoder):
    def default(self, o):
        return o.__dict__    

>>> MyEncoder().encode(f)
'{"fname": "/foo/bar"}'

Ensuite, vous passez cette classe dans l' json.dumps() méthode de cls kwarg:

json.dumps(cls=MyEncoder)

Si vous aussi vous voulez décoder, alors vous aurez à fournir une coutume object_hook de la JSONDecoder classe. Par exemple

>>> def from_json(json_object):
        if 'fname' in json_object:
            return FileItem(json_object['fname'])
>>> f = JSONDecoder(object_hook = from_json).decode('{"fname": "/foo/bar"}')
>>> f
<__main__.FileItem object at 0x9337fac>
>>> 

207voto

gecco Points 4063

Pour les plus complexes des classes vous pourriez envisager de l'outil jsonpickle:

jsonpickle est une bibliothèque Python pour la sérialisation et la désérialisation du complexe des objets Python et de JSON.

Le standard de Python bibliothèques pour le codage Python en JSON, comme le stdlib json, simplejson, et demjson ne peut gérer que Python primitives sont directement en JSON équivalent (par exemple, dicts, des listes, des chaînes de caractères, entiers, etc.). jsonpickle s'appuie sur le dessus de ces bibliothèques et permet à plus de structures de données complexes pour être sérialisé en JSON. jsonpickle est hautement configurable et extensible–en permettant à l'utilisateur de choisir le JSON backend et ajouter d'autres backends.

(jsonpickle sur PyPi)

41voto

Paulo Freitas Points 3039

Un autre cas consiste à encapsuler JSON dumping dans la classe propre :

Ou même sous-classement FileItem classe d’une classe de JSONSeriazable :

Test :

4voto

danbrough Points 866

Voici mes 3 cents...
Cela illustre la sérialisation json explicite d’un objet python arborescente.
Remarque : Si vous vouliez en fait un code comme celui-ci vous pouvez utiliser la classe torsadée FilePath .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X