所以我有一些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?
答案 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字符串写入磁盘上的文件!