2016-04-27 56 views
1

所以我有,我想序列化JSON如何序列Python的字典,以JSON

{'someproperty': 0, 'anotherproperty': 'value', 'propertyobject': SomeObject(someproperty=0, anotherproperty=0)} 

json.dumps拋出一個TypeError: SomeObject(someproperty=0, anotherproperty=0) is not JSON serializable

那麼如何才能正確我我的序列化的python字典一些Python字典?

+0

即使SomeObject應該是json對象,您也不能擁有對象。像{'someproperty':0,'another property':'value','SomeJson':{'someproperty':0,'another property':0}} –

回答

1

的問題是,蟒蛇不知道如何表示SomeObject

您可以創建像這樣的回退:

import json 

def dumper(obj): 
    try: 
     return obj.toJSON() 
    except: 
     return obj.__dict__ 

obj = {'someproperty': 0, 'anotherproperty': 'value', 'propertyobject': SomeObject(someproperty=0, anotherproperty=0)} 

print json.dumps(obj, default=dumper, indent=2) 
0

Python可以只序列化是一個內置的數據類型的對象。 就你而言,「SomeObject」是Python無法序列化的用戶定義類型。如果您試圖序列化任何不是json序列化的數據類型,則會得到TypeError「TypeError:不是JSON序列化的」。因此,應該有一箇中間步驟,將這些非內置數據類型轉換爲以可序列化數據結構(列表,字典,數字和字符串)構建的Python。

因此,讓我們將您的SomeObject轉換爲Python字典,因爲字典是表示對象(因爲它具有鍵/值對)的最簡單方式。您可以將所有的SomeObject實例屬性複製到新的字典中,然後設置! myDict = self .__ dict __。copy() This myDict現在可以是您的「propertyobject」的值。

經過這一步,當您轉換字典字符串(JSON格式,但它可以是YAML,XML,CSV ...) - 對我們來說將是jsonObj = JSON.dumps(finalDict)

最後一步是將jsonObj字符串寫入磁盤上的文件!