Сериализация списка в JSON - PullRequest
41 голосов
/ 27 января 2010

Я отправляю информацию между клиентом и сервером Django, и я хотел бы использовать для этого JSON. Я посылаю простую информацию - список строк. Я пытался использовать django.core.serializers, но когда я это сделал, я получил

AttributeError: 'str' object has no attribute '_meta'

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

Ответы [ 3 ]

79 голосов
/ 27 января 2010

Вы можете использовать чистый Python для этого:

import json
list = [1, 2, (3, 4)] # Note that the 3rd element is a tuple (3, 4)
json.dumps(list) # '[1, 2, [3, 4]]'
7 голосов
/ 27 января 2010

Если вы используете Python 2.5, вам может потребоваться импортировать simplejson:

try:
    import json
except ImportError:
    import simplejson as json
3 голосов
/ 06 июля 2012

Да, но что вы делаете с объектами django? простой JSON имеет тенденцию задыхаться от них.

Если объекты являются отдельными объектами модели (не наборами запросов, например), я иногда сохранял тип объекта модели и pk, например, так:

seralized_dict = simplejson.dumps(my_dict, 
                     default=lambda a: "[%s,%s]" % (str(type(a)), a.pk)
                     )

для десериализации вы можете восстановить объект, на который ссылается model.objects.get (). Это не поможет, если вас интересуют подробности об объекте того типа, в котором хранится dict, но это эффективно, если вам нужно только знать, какой объект был задействован.

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