Подтвердить что ты не робот

Как сделать 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/

4b9b3361

Ответ 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