我如何JSON序列化Python字典?

Den*_*gan 41 django serialization json

我正在尝试为JSON编写一个Django函数来序列化某些东西并将其返回到一个HttpResponse对象中.

def json_response(something):
    data = serializers.serialize("json", something)
    return HttpResponse(data)
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

return json_response({ howdy : True })
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

"bool" object has no attribute "_meta"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:这是追溯:

http://dpaste.com/38786/

Sim*_*son 65

更新:Python现在有自己的json处理程序,只需使用import json而不是使用simplejson.


Django序列化程序模块用于序列化Django ORM对象.如果你想编码一个普通的Python字典,你应该使用simplejson,它与Django一起提供,以防你没有安装它.

import json

def json_response(something):
    return HttpResponse(json.dumps(something))
Run Code Online (Sandbox Code Playgroud)

我建议用应用程序/ javascript Content-Type标头发回它(你也可以使用application/json,但这会阻止你在浏览器中调试):

import json

def json_response(something):
    return HttpResponse(
        json.dumps(something),
        content_type = 'application/javascript; charset=utf8'
    )
Run Code Online (Sandbox Code Playgroud)

  • 这应该是https://addons.mozilla.org/en-US/firefox/addon/10869的链接 (2认同)

Fil*_*ale 32

那个扩展HttpResponseJsonResponse 怎么样:

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')
Run Code Online (Sandbox Code Playgroud)


Dmi*_*lov 8

使用较新版本的Django,您只需使用django.http提供的JsonResponse:

from django.http import JsonResponse

def my_view(request):
    json_object = {'howdy': True}
    return JsonResponse(json_object)
Run Code Online (Sandbox Code Playgroud)

您可以在官方文档中找到更多详细信息.


Sal*_*ali 5

在python 2.6及更高版本中,有一个很好的JSON库,其中有许多函数,其中json.dumps()将一个对象序列化为一个字符串.

所以你可以这样做:

import json
print json.dumps({'howdy' : True })
Run Code Online (Sandbox Code Playgroud)