2014-04-15 21 views
6

我有一個自定義類,讓我們調用是類ObjectA(),它有一堆函數,屬性等..,我想序列化對象使用Python中的標準JSON庫,我有什麼要實現這個對象將序列化爲JSON,而無需編寫自定義編碼器?做一個自定義類JSON可序列化

謝謝

+0

也許這個問題的欺騙:http://stackoverflow.com/questions/3768895/python-how-to-make -a-class-json-serializable – dano

回答

6

子類json.JSONEncoder,然後構造一個合適的字典或數組。

請參閱 「擴展JSONEncoder」 的背後this link

像這樣:

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

'沒有寫入自定義編碼器' – Ford

+2

沒有自定義編碼器是不可能的。如果問題的前提是json不知道如何對其進行編碼,那麼任何解決方案都將涉及一個自定義編碼器。也許不是擴展了JSONEncoder的一個 - 你可以寫一個簡單的f()將一個對象映射到一個字典 - 但是如果不是自定義編碼器,那會是什麼呢? – FrobberOfBits

+0

應該提到,在你的回答中,OP知道這是不可能的,以及其他選項(如果有)。對不起,如果我有點粗魯。 – Ford