2014-04-15 26 views
6

Özel bir sınıfım var, arayalım ObjectA() sınıfıdır ve bir dizi işlev, özellik vb. Var ve python'daki standart json kütüphanesini kullanarak nesneyi serileştirmek istiyorum , bu nesnenin özel bir kodlayıcı yazmadan JSON'a serileştirilmesi için ne yapmam gerekiyor? Özel Sınıf JSON'u serialize edilebilir yapın

size

+0

bu soruya bir dupe: http://stackoverflow.com/questions/3768895/python-how-to-make -Özel bir kodlayıcı ' – dano

cevap

6

Alt Sınıf json.JSONEncoder ederiz ve daha sonra uygun bir sözlüğü ya da dizi oluşturmak.

Bkz Bunun gibi this link

arkasında "JSONEncoder genişletme":

Muhtemelen
>>> 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

'Özel bir kodlayıcı olmadan mümkün değil. Sorunun önermesi, jsonun kodlamayı önceden bilmediği şeklindeyse, herhangi bir çözüm özel bir kodlayıcı içerecektir. Belki de JSONEncoder'ı genişleten biri değil - bir nesneyi bir dict üzerine haritalayan basit bir f() yazabilirsiniz, ancak özel bir kodlayıcı olmasa ne olur? – Ford

+2

yazmadan -a-sınıf-json-seri hale getirilebilir – FrobberOfBits

+0

Cevabınızda, OP'nin mümkün olmadığını ve diğer seçeneklerin (varsa) ne olduğunu bildiğinden bahsetmeliyiz. Üzgünüm, biraz kaba gelsem. – Ford