Как мне JSON сериализовать словарь Python? - PullRequest
38 голосов
/ 28 апреля 2009

Я пытаюсь создать функцию 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"

Есть идеи?

РЕДАКТИРОВАТЬ: Вот обратная связь:

http://dpaste.com/38786/

Ответы [ 5 ]

64 голосов
/ 28 апреля 2009

Обновление: 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 (вы также можете использовать application / json, но это предотвратит отладку в вашем браузере):

import json

def json_response(something):
    return HttpResponse(
        json.dumps(something),
        content_type = 'application/javascript; charset=utf8'
    )
31 голосов
/ 29 апреля 2009

Как насчет 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')
8 голосов
/ 04 января 2017

В новых версиях Django вы можете просто использовать JsonResponse, предоставленный django.http:

from django.http import JsonResponse

def my_view(request):
    json_object = {'howdy': True}
    return JsonResponse(json_object)

Более подробную информацию вы можете найти в официальных документах .

5 голосов
/ 06 февраля 2014

В Python 2.6 и выше есть хорошая библиотека JSON , в которой есть много функций, среди которых json.dumps () , которая сериализует объект в строку.

Так что вы можете сделать что-то вроде этого:

import json
print json.dumps({'howdy' : True })
1 голос
/ 04 апреля 2014
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...