如何 JSON 序列化 Python 字典?
Posted
技术标签:
【中文标题】如何 JSON 序列化 Python 字典?【英文标题】:How do I JSON serialize a Python dictionary? 【发布时间】:2010-10-22 08:06:14 【问题描述】:我正在尝试为 JSON 序列化某些内容并在 HttpResponse
对象中返回它创建一个 Django 函数。
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/
【问题讨论】:
没有实际的回溯,没有。 【参考方案1】:更新:Python 现在有自己的 json 处理程序,只需使用 import json
而不是使用 simplejson
。
Django 序列化程序模块旨在序列化 Django ORM 对象。如果你想编码一个普通的 Python 字典,你应该使用 simplejson,它是 Django 附带的,以防你还没有安装它。
import json
def json_response(something):
return HttpResponse(json.dumps(something))
我建议将它与 application/javascript Content-Type 标头一起发送回来(您也可以使用 application/json 但这会阻止您在浏览器中进行调试):
import json
def json_response(something):
return HttpResponse(
json.dumps(something),
content_type = 'application/javascript; charset=utf8'
)
【讨论】:
在 Firefox 中使用 addons.mozilla.org/en-US/firefox/addon/…> 来很好地格式化以 application/json 内容类型返回的 JSON。 这应该是指向addons.mozilla.org/en-US/firefox/addon/10869的链接 该插件在 chrome 中也可用 你可以使用 import json 代替 simplejson 添加到@radtek 评论,simplejson 已被弃用,Django 本身现在使用内置的 json 模块。 github.com/pythonforfacebook/facebook-sdk/issues/106【参考方案2】:扩展 HttpResponse 的 JsonResponse Class 怎么样:
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 library,它有很多功能,其中json.dumps() 将对象序列化为字符串。
所以你可以这样做:
import json
print json.dumps('howdy' : True )
【讨论】:
【参考方案4】: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
【讨论】:
【参考方案5】:对于较新版本的 Django,您只需使用 django.http 提供的 JsonResponse:
from django.http import JsonResponse
def my_view(request):
json_object = 'howdy': True
return JsonResponse(json_object)
您可以在official docs找到更多详细信息。
【讨论】:
以上是关于如何 JSON 序列化 Python 字典?的主要内容,如果未能解决你的问题,请参考以下文章