【发布时间】:2017-09-11 19:36:37
【问题描述】:
我正在尝试使用多个嵌套对象和列表来序列化复杂的 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 的情况下创建自己的序列化方法,但这似乎太多了......
【问题讨论】:
-
呃,如果你愿意写你自己的序列化方法而不是使用
json,为什么不使用pickle呢?这是标准库的一部分,它应该处理自定义 Python 类型。 -
无论如何,通常solutions to this problem 将任意 Python 对象序列化为 JSON 涉及的步骤相当于为每种类类型编写自定义方法。因为本质上,JSON 不是为处理任意对象而设计的,而是本质上是两种抽象数据类型,JSON 数组和 JSON 对象。在 Python 中,JSON 用于序列化
dict和list与str和int类型字段/值的复杂组合。听起来你不想要 JSON,你想要pickle。 -
你考虑过jsonpickle:pypi.python.org/pypi/jsonpickle吗?
-
@quamrana pickle 和 jsonpickle 有同样的问题。他们只是忽略自定义类型对象的列表
-
嗯,对我有用。我像你一样创建存根对象,并添加python类型(int、str、list、dict等)和其他存根的混合属性,而jsonpickle有自己的方式在常规json中表示我的存根。
标签: python json list serialization