Как сделать JSON сериализацией словаря Python?
Я пытаюсь сделать Django-функцию для JSON-сериализации и вернуть ее в объект HttpResponse
.
def json_response(something):
data = serializers.serialize("json", something)
return HttpResponse(data)
Я использую его вот так:
return json_response({ howdy : True })
Но я получаю эту ошибку:
"bool" object has no attribute "_meta"
Любые идеи?
EDIT: Вот трассировка:
http://dpaste.com/38786/
Ответы
Ответ 1
Обновление: у Python теперь есть собственный обработчик json, просто используйте import json
вместо simplejson
.
Модуль сериализаторов Django предназначен для сериализации объектов ORM Django. Если вы хотите закодировать обычный словарь Python, вы должны использовать simplejson, который поставляется с Django, если вы его еще не установили.
import json
def json_response(something):
return HttpResponse(json.dumps(something))
Я бы предложил отправить его обратно с заголовком Content-Type приложения /javascript (вы также можете использовать приложение /json, но это не позволит вам отлаживать ваш браузер):
import json
def json_response(something):
return HttpResponse(
json.dumps(something),
content_type = 'application/javascript; charset=utf8'
)
Ответ 2
Как насчет класса JsonResponse, который расширяет HttpResponse:
from django.http import HttpResponse
from django.utils import simplejson
class JsonResponse(HttpResponse):
def __init__(self, data):
content = simplejson.dumps(data,
indent=2,
ensure_ascii=False)
super(JsonResponse, self).__init__(content=content,
mimetype='application/json; charset=utf8')
Ответ 3
В python 2.6 и выше есть хорошая библиотека JSON, которая имеет много функций, среди которых json.dumps(), который сериализует объект в строку.
Итак, вы можете сделать что-то вроде этого:
import json
print json.dumps({'howdy' : True })
Ответ 4
С более новыми версиями Django вы можете просто использовать JsonResponse, предоставленный django.http:
from django.http import JsonResponse
def my_view(request):
json_object = {'howdy': True}
return JsonResponse(json_object)
Подробнее вы можете найти в официальных документах .
Ответ 5
import json
my_list = range(1,10) # a list from 1 to 10
with open('theJsonFile.json', 'w') as file_descriptor:
json.dump(my_list, file_descriptor) #dump not dumps, dumps = dump-string