【问题标题】:Json serialization of Python Properties classPython Properties类的Json序列化
【发布时间】: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


【解决方案1】:

检查一下:

def serializable_attrs(self):
    return (dict(
        (i.replace(self.__class__.__name__, '').lstrip("_"), value)
        for i, value in self.__dict__.items()
    ))

它应该返回一个包含你的类属性的字典。

我替换了类名,因为__dict__ 中的属性看起来像:_ChildProps___child_prop1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2015-10-08
    • 2017-01-20
    • 2020-06-10
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多