62 votes

Encodage d'un objet python imbriqué en JSON

Je veux encoder des objets en JSON. Mais, je n'arrive pas à trouver comment faire la sortie sans l'échappement des chaînes.

import json

class Abc:
    def __init__(self):
        self.name="abc name"
    def toJSON(self):
        return json.dumps(self.__dict__, cls=ComplexEncoder)

class Doc:
    def __init__(self):
        self.abc=Abc()
    def toJSON(self):
        return json.dumps(self.__dict__, cls=ComplexEncoder)

class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Abc) or isinstance(obj, Doc):
            return obj.toJSON()
        else:
            return json.JSONEncoder.default(self, obj)

doc=Doc()
print doc.toJSON()

Le résultat est (le dumps renvoie une représentation de chaîne de caractères, c'est pourquoi les " sont échappés)

{"abc": "{\"name\": \"abc name\"}"}

Je veux quelque chose d'un peu différent. Le résultat attendu est

{"abc": {"name": "abc name"}"}

Mais je ne vois pas comment faire... Un conseil ?

Merci d'avance.

0 votes

Voir stackoverflow.com/a/63718624/1497139 pour une réponse à la question plus générale

2voto

Marc Kruiß Points 1

Pour une sérialisation plus complexe, j'utiliserais jsons il a été publié en 2022.

  • Transformez les objets Python en dicts ou en chaînes (JSON) et inversement.

  • Aucun changement n'est nécessaire dans vos objets

  • Facilement personnalisable et extensible

  • Travaille avec les classes de données, les attrs et les POPOs.

      pip install jsons
      class Person:
            name:str
            birthday:datetime
    
      personObject = Person("Tony", date_of_birth)
    
      import jsons
      json_data = jsons.dumps(personObject, indent=4)

1voto

veegee Points 349

C'est ce que vous cherchez : https://github.com/jsonpickle/jsonpickle

Il effectue une sérialisation imbriquée des objets Python et peut facilement être étendu pour sérialiser des types personnalisés.

0 votes

Ce n'est pas le cas.

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