Pet*_* G. 11 python django json python-3.x jsonresponse
返回a时会发生这种情况JSONResponse,这是在Django 1.7中添加的.并且是一个包装json.dumps.但是,在这种情况下会导致错误.我确信数据是正确的,可以通过Python shell序列化为JSON.
将数据序列化为JSON的正确方法是什么?
from django.http import JsonResponse
from collections import OrderedDict
data = OrderedDict([('doc', '546546545'), ('order', '98745'), ('nothing', '0.0')])
return JsonResponse(data) # doesn't work, JSONRenderer().render(data) works
Run Code Online (Sandbox Code Playgroud)
结果出现此错误:
<map object at 0x7fa3435f3048> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
print(data) 得到:
OrderedDict([('doc', '546546545'), ('order', '98745'), ('nothing', '0.0')])
knb*_*nbk 25
map()在Python 3中是一个生成器函数,它在JSON中不可序列化.您可以通过将其转换为列表使其可序列化:
from django.http import JsonResponse
from collections import OrderedDict
def order(request):
bunch = OrderSerializer(Order.objects.all(), many=True)
headers = bunch.data[0].keys()
# consume the generator and convert it to a list here
headers_prepared = list(map(lambda x: {'data': x} , headers))
ordered_all = (('columns', headers_prepared), ('lines', bunch.data))
data = OrderedDict(ordered_all)
return JsonResponse(data)
Run Code Online (Sandbox Code Playgroud)