将具有多个类和列表的复杂python对象序列化为JSON

时间:2017-09-11 19:36:37

标签: python json list serialization

我正在尝试使用多个嵌套对象和列表序列化复杂的python对象。我遇到的问题在这里描述:Python serialize objects list to JSON

现在,我有一些对象,让我们说:

class A:
    id = 0
    objects_b = []
    objects_c = []

class B:
    id = 0

class C:
    id = 0

a = A()
b = B()
c = C()
a.objects_b = [b]
a.objects_c = [c]

我不想为我添加到结构中的每个新类添加自定义方法。有没有办法制作统一的序列化方法来处理每个新类,无论它是如何包含在列表中或作为参数? 使用任何对象类型的方法都很棒,但我也可以容忍从一些常规类型中继承所有对象的子类。试图在最后一小时找到它并且有点疯狂,我几乎准备好在不使用json lib的情况下创建自己的序列化方法,但那似乎太多了......

1 个答案:

答案 0 :(得分:1)

JSON只能序列化简单类型(字符串,字符串,列表等)。它不知道如何处理Python对象。

因此,如果要序列化对象,则无法定义这些对象所属的类的序列化。你可以使用json库(阅读default)来生成一个对象的序列化,但是你有自己的特定于应用程序(或至少是特定于python)的json扩展,你也可以使用一些东西这真的是特定于python的,比如pickle,它已经开箱即用了。人们使用json是因为它简单,易读且与语言无关。如果你为json定义自己的协议扩展以序列化python对象,那么首先使用json没有任何理由。

编写自己的对象序列化很难。考虑检测周期,为可能碰巧存在于对象图中的每个对象编写序列化器(即使它只是像python DateTime这样简单的东西),等等。