jsonpickle 将前导下划线添加到 python 对象属性
jsonpickle adds leading underscore to python object properties
我正在使用 jsonpickle 将嵌套的 python 对象转换为 json。 Python class:
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 中创建前导下划线?谢谢。
这是完全正常的行为。您的实例 state 已存储,而不是外部 API。属性不是状态的一部分,它们仍然是方法,因此是 API.
的一部分
如果你必须url
存储在JSON结果中,那么使用__getstate__
method到return一个能更好反映你的状态的字典。您必须创建匹配的 __setstate__
方法:
def __getstate__(self):
return {'url': self._url}
def __setstate__(self, state):
self._url = state.get('url')
我正在使用 jsonpickle 将嵌套的 python 对象转换为 json。 Python class:
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 中创建前导下划线?谢谢。
这是完全正常的行为。您的实例 state 已存储,而不是外部 API。属性不是状态的一部分,它们仍然是方法,因此是 API.
的一部分如果你必须url
存储在JSON结果中,那么使用__getstate__
method到return一个能更好反映你的状态的字典。您必须创建匹配的 __setstate__
方法:
def __getstate__(self):
return {'url': self._url}
def __setstate__(self, state):
self._url = state.get('url')