地图对象 JSON 不可序列化

Map object is not JSON serializable

返回 Django 1.7 中添加的 JSONResponse 时会发生这种情况。并且是 json.dumps 的包装器。但是,在这种情况下,它会导致错误。我确定数据是正确的,可以序列化为 JSON 通过 Python shell.

将数据序列化为 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

导致此错误:

<map object at 0x7fa3435f3048> is not JSON serializable

print(data) 给出:

OrderedDict([('doc', '546546545'), ('order', '98745'), ('nothing', '0.0')])

map() in 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)

如果有人在使用 map() 时遇到这个问题,你可以尝试使用 list(map()) 来解决这个问题。