Serialisieren eines verschachtelten namedtuple in JSON mit Python = 2.7

8

Ich habe ein ähnliches Problem wie CalvinKrishys Problem Samplebias 'Lösung funktioniert nicht mit den Daten, die ich habe.

Ich benutze Python 2.7.

Hier sind die Daten:

Namedtuple

%Vor%

Diktat

%Vor%

Wie Sie sehen können, sind a1 und a2 die gleichen, außer dass eines namedtuple ist und das andere dict ist.

Aber die json.dumps ist anders:

%Vor%

Ich möchte json-Format von a1 genau wie es für a2 tun.

    
Kaushik Acharya 05.06.2013, 11:14
quelle

1 Antwort

6

Das Problem liegt in der Verwendung von namedtuple._asdict , nicht json.dumps . Wenn Sie sich den Code mit namedtuple(..., verbose=True) ansehen, sehen Sie Folgendes:

%Vor%

Nur die oberste Ebene wird tatsächlich in ein OrderedDict geändert, alle enthaltenen Elemente bleiben unberührt. Dies bedeutet, dass verschachtelte namedtuple s immer noch tuple Unterklassen sind und (richtig) serialisiert werden und so.

Wenn der Aufruf einer bestimmten Konvertierungsfunktion für Sie akzeptabel ist (wie der Aufruf von _asdict ), können Sie einen eigenen schreiben.

%Vor%

Wie Sie sehen, besteht das größte Problem darin, verschachtelte Strukturen zu haben, die nicht namedtuple s sind, sie aber enthalten könnten.

    
MisterMiyagi 25.09.2015 13:06
quelle

Tags und Links