2014-04-15 13 views
6

Ich habe eine benutzerdefinierte Klasse, nennen wir die Klasse ObjectA(), und sie haben eine Reihe von Funktionen, Eigenschaften usw., und ich möchte Objekt mit der Standard-Json-Bibliothek in Python serialisieren , was muss ich implementieren, dass dieses Objekt zu JSON serialisiert, ohne einen benutzerdefinierten Encoder zu schreiben?Erstellen einer benutzerdefinierten Klasse JSON serializable

Danke

+0

Wahrscheinlich eine Betrogene dieser Frage: http://stackoverflow.com/questions/3768895/python-how-to-make -a-class-json-serializable – dano

Antwort

6

Subclass json.JSONEncoder, und dann ein geeignetes Wörterbuch oder Array konstruieren.

Siehe "Erweitern JSONEncoder" hinter this link

So:

>>> class A: pass 
... 
>>> a = A() 
>>> a.foo = "bar" 
>>> import json 
>>> 
>>> class MyEncoder(json.JSONEncoder): 
... def default(self, obj): 
...  if isinstance(obj, A): 
...   return { "foo" : obj.foo } 
...  return json.JSONEncoder.default(self, obj) 
... 
>>> json.dumps(a, cls=MyEncoder) 
'{"foo": "bar"}' 
+4

'ohne einen benutzerdefinierten Encoder schreiben ' – Ford

+2

Nicht möglich ohne einen benutzerdefinierten Encoder. Wenn die Voraussetzung der Frage ist, dass json nicht bereits wissen, wie man es kodiert, dann wird jede Lösung einen kundenspezifischen Kodierer einschließen. Vielleicht nicht eine, die JSONEncoder erweitert - Sie könnten ein einfaches f() schreiben, das ein Objekt auf ein dict abbildet - aber was wäre das, wenn es kein benutzerdefinierter Encoder wäre? – FrobberOfBits

+0

Sollte das in Ihrer Antwort erwähnen, so weiß OP, dass es nicht möglich ist, und was die anderen Optionen (falls vorhanden) gibt. Tut mir leid, wenn ich ein bisschen unhöflich geworden bin. – Ford

Verwandte Themen