simplejson.dumps(dict) throws "nicht als JSON serialisierbar"
Habe ich ein Python-dictionary, wo die Schlüssel sind strings, und die Werte sind Listen von MyObject-Objekte.
Wenn ich ausführen
simplejson.dumps(dict)
wirft er "MyObject nicht JSON serialisierbar".
Wie kann ich vermeiden, dass diese Ausnahme, und wie kann ich machen MyObject serialisierbar?
- Siehe stackoverflow.com/questions/1458450/...
- ich sehe die verlinkten Lösung, aber es hilft ein wenig. Für mich ist es nicht Arbeit (es gibt eine Ausnahme während der Ausführung der Abfrage in der BigTable).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtige Antwort
Um Ihre
MyObject
serializable, die Sie brauchen, um eine Methode zu implementieren, die Sie verweisen können, aufdumps
. Zum Beispiel:Die kühle Sache ist, dass
dumps
wird, wie jedes andere JSON-serialisiertes Objekt, rufen die Methode der Serialisierung rekursiv. Das istobj.parent
wird sowie serialisiert erhalten, ohne weitere Aktion von Ihnen.Golf würde Version
Wenn alles, was Sie tun möchten, ist 1-1 map-Instanz-Variablen-Namen, um Ihre jeweiligen Werte, die Sie verwenden können, einige eingebaute Python-magic. Wenn Sie serialisieren möchten ein komplexeres Objekt (wieder, nur mit einem 1: 1-Variablen-Wert-Karte), rufen Sie einfach diese Zeile:
Für die gegebene Instanz von
MyObject
ist, wird es Verhalten sich identisch zu den oben genanntenserialize
Methode.operator.attrgetter('__dict__')
statt mit einem lambda.lambda
version erstellen müssen neue call-Rahmen, ausführen von python-Bytecode, und insgesamt eine Reihe von arbeiten. Wenn es keine präzise, gebaut in der Art, es zu tun, einelambda
ist in Ordnung, aber wenn etwas so präzise und genau wie die Mitglieder deroperator
Modul die verfügbar sind, diejenigen sind besser.