【发布时间】:2018-03-26 05:45:11
【问题描述】:
我有一个属性类:
from child_props import ChildProps
class ParentProps(object):
"""Contains all the attributes for CreateOrderRequest"""
def __init__(self):
self.__prop1 = None
self.__child_props = ChildProps()
@property
def prop1(self):
return self.__prop1
@prop1.setter
def prop1(self, value):
self.__prop1 = value
@property
def child_props(self):
return self.__child_props
@child_props.setter
def child_props(self, value):
self.__child_props = value
另一个类是:
class ChildProps(object):
"""Contains all the attributes for CreateOrderRequest"""
def __init__(self):
self.__child_prop1 = None
self.__child_prop2 = None
@property
def child_prop1(self):
return self.__child_prop1
@child_prop1.setter
def child_prop1(self, value):
self.__child_prop1 = value
@property
def child_prop2(self):
return self.__child_prop2
@child_prop2.setter
def child_prop2(self, value):
self.__child_prop2 = value
在 main.py 中
parent_props = ParentProps()
parent_props.prop1 = "Mark"
child_props = ChildProps()
child_props.child_prop1 = 'foo'
child_props.child_prop2 = 'bar'
parent_props.child_props = child_props
如何将 parent_props 序列化为 json 字符串,如下所示:
{
"prop1" : "Mark",
"child_props" : {
"child_prop1" : "foo",
"child_prop2" : "bar"
}
}
PS : json.dumps 只能序列化原生 python 数据类型。 pickle 模块只对字节进行对象序列化。
就像我们在dotnet中有NewtonSoft,在java中有jackson,在Python中序列化getter setter属性类对象的等效序列化器是什么。
我在谷歌上搜索了很多,但没有得到太多帮助。 任何领先都会非常明显。谢谢
【问题讨论】:
-
最简单的方法是编写一个生成该字典的函数,然后
json.dumps该字典。 -
有有一堆第三方库来帮助序列化为 JSON,甚至以声明的方式生成类,以构建
@property和 @987654328 @ 和 JSON 序列化,但 SO 不是请求库推荐的好地方。如果这是您想要的,但您无法通过搜索找到它,请尝试 python.org 网站上的社区部分(可能是 python-list 邮件列表或#python IRC 频道)。 -
感谢 abarnet 的回复。可以编写单独的序列化程序来进行 json 序列化,但就像在其他编程语言中一样,我们有一个流行的序列化程序来完成这项任务,而无需为每个属性类编写单独的序列化程序。我正在寻找那个序列化程序。我也已经检查了 python.org 网站和 IRC 频道,但没有得到太多帮助,这就是为什么在这里发布。我希望你明白我的意思。
-
抱歉,如果您要求图书馆推荐,SO 无法帮助您。有关详细信息,请参阅 help center 页面。
标签: python json python-2.7 serialization json-serialization