jsonpickle добавляет начальное подчеркивание к свойствам объекта python - PullRequest
0 голосов
/ 27 ноября 2018

Я использую 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.Как избежать создания подчеркивания в json при использовании свойств pythin?спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

Это совершенно нормальное поведение.Ваш экземпляр состояние сохраняется, а не внешний API.Свойства не являются частью состояния, они по-прежнему являются методами и, следовательно, являются частью API.

Если необходимо сохранить url в результате JSON, используйте метод __getstate__ чтобы вернуть словарь, который лучше отражает ваше состояние.Вам нужно будет создать соответствующий __setstate__ метод:

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

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