如何将Python dict序列化为JSON

时间:2016-04-27 04:02:37

标签: python json python-2.7 dictionary typeerror

所以我有一些python dict,我想序列化为JSON

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

但是json.dumps会抛出TypeError: SomeObject(someproperty=0, anotherproperty=0) is not JSON serializable

那么如何正确地序列化我的python dict?

2 个答案:

答案 0 :(得分:3)

问题是,python不知道如何表示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)

答案 1 :(得分:0)

Python只能序列化内置数据类型的对象。 在您的情况下,“SomeObject”是Python无法序列化的用户定义类型。如果您尝试序列化不是json serializable的任何数据类型,则会出现TypeError“ TypeError:不是JSON可序列化”。因此,应该有一个中间步骤,将这些非内置数据类型转换为以可序列化数据结构(列表,字典,数字和字符串)构建的Python。

因此,让我们将SomeObject转换为python字典,因为字典是表示Object的最简单方法(因为它具有键/值对)。您可以将所有SomeObject实例属性复制到新字典中并进行设置! myDict = self .__ dict __。copy() myDict 现在可以是“propertyobject”的值。

此步骤之后是将字典转换为字符串(JSON格式,但它可以是YAML,XML,CSV ...) - 对于我们来说,它将是 jsonObj = JSON.dumps(finalDict)

最后一步是将jsonObj字符串写入磁盘上的文件!