jsonpickle在python对象属性中添加了下划线

时间:2018-11-26 22:12:08

标签: python jsonpickle

我正在使用jsonpickle将嵌套的python对象转换为json。 Python类:

class Cvideo:
    def __init__(self):
        self._url = None

    @property
    def url(self):
        return self._url

    @url.setter
    def url(self, value):
        self._url = value

序列化模块:

def create_jason_request(self, vid1: Cvideo):
    vid1 = Cvideo()
    vid1.url = entry['uploader_url'] # will get a leading underscore
    vid1.notdefinedproperty = "test" # wont get a leading underscore in json

    return jsonpickle.encode(vid, unpicklable=False)

不幸的是,创建的json描述的是_url而不是url。使用pythin属性时如何避免在json中导致下划线创建?谢谢。

1 个答案:

答案 0 :(得分:1)

这完全是正常行为。您的实例 state 已存储,而不是外部API。属性不是状态的一部分,它们仍然是方法,因此是API的一部分。

如果必须将url存储在JSON结果中,请使用__getstate__ method返回更好地反映您的状态的字典。您必须创建一个匹配的__setstate__方法:

def __getstate__(self):
    return {'url': self._url}

def __setstate__(self, state):
    self._url = state.get('url')