при преобразовании списка Python в JSON и обратно, вы бросаете? - PullRequest
0 голосов
/ 11 сентября 2010

Когда вы преобразуете список пользовательских объектов в json, а затем преобразуете его обратно в исходное состояние, нужно ли его преобразовывать?в объект списка Python?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

json.dumps(somepython) дает вам допустимую строку JSON, представляющую объект Python somepython (который вполне может быть списком), а json.loads(ajsonstring) идет в обратном направлении - и без проблем с безопасностью, и без "приведения" ?). Это с Python 2.6 или выше, с использованием модуля json в стандартной библиотеке. Если вы застряли с 2.5 (например, для использования в Google App Engine), вы можете использовать эквивалентный сторонний модуль simplejson .

1 голос
/ 11 сентября 2010

Вы будете нести ответственность за написание Python для кодирования и декодирования ваших классов.Как вы их кодируете?Это будет иметь большое значение для того, как вы их расшифруете.Python не пойдет вам на пользу, если вы выйдете за пределы dicts, списков, юникода, строк, целых чисел, чисел с плавающей точкой, логических значений и None.

Каноническим способом кодирования пользовательских классов является создание подкласса json.JSONEncoder ипредоставить метод default.Метод default имеет сигнатуру 'self, obj' и возвращает obj, закодированный в json, если он знает, как, и возвращает super(clsname, self).default(obj), если не знает.

Если вы кодируете свои классы как dicts, то вы можете написатьфункция, которая принимает один аргумент (декодированный словарь) и возвращает декодированный объект из этого.Затем передайте эту функцию конструктору для json.JSONDecoder и используйте метод decode для этого экземпляра.

В общем, json не идеально подходит для сериализации сложных классов.Если вы можете захватить все состояние функции таким образом, чтобы оно могло быть передано методу init, тогда используйте его, но если нет, то вы просто попытаетесь повредить голову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...