94 votes

Sérialisation d'un namedtuple Python en json

Quelle est la méthode recommandée pour sérialiser un namedtuple en json avec les noms de champs conservés ?

Sérialisation d'un namedtuple en json, seules les valeurs sont sérialisées et les noms des champs sont perdus dans la traduction. Je voudrais que les champs soient également conservés lors de la conversion en json et j'ai donc procédé comme suit :

class foobar(namedtuple('f', 'foo, bar')):
    __slots__ = ()
    def __iter__(self):
        yield self._asdict()

Ce qui précède est sérialisé en json comme prévu et se comporte comme suit namedtuple dans d'autres endroits où je l'utilise (accès aux attributs, etc.), sauf avec des résultats non-tuple comme ceux de l'itération (ce qui convient à mon cas d'utilisation).

Quelle est la "bonne méthode" pour convertir en json en conservant les noms des champs ?

0 votes

0voto

Dim Points 311

Voici mon point de vue sur le problème. Elle sérialise le NamedTuple, s'occupe des NamedTuples pliés et des listes qu'ils contiennent.

def recursive_to_dict(obj: Any) -> dict:
_dict = {}

if isinstance(obj, tuple):
    node = obj._asdict()
    for item in node:
        if isinstance(node[item], list): # Process as a list
            _dict[item] = [recursive_to_dict(x) for x in (node[item])]
        elif getattr(node[item], "_asdict", False): # Process as a NamedTuple
            _dict[item] = recursive_to_dict(node[item])
        else: # Process as a regular element
            _dict[item] = (node[item])
return _dict

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