2016-04-27 57 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字符串写入磁盘上的文件!