当返回Django 1.7中添加的JSONResponse时会发生这种情况.是一个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

导致此错误的原因:

<map object at 0x7fa3435f3048> is not JSON serializable

print(data)给出:

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

推荐答案

Python 3中的map()是一个生成器函数,在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)

Python-3.x相关问答推荐

数据类对象列表的字典获取方法-在数据类列表中查找具有特定变量值的数据类

从PYTHON中获取单行和多行的Rguar表达式

在 Python 中比较和排序列之间的值(带有不匹配列)

链接列未延伸到数据框的末尾

我应该如何调整我的变量,以便如果有任何单词符合其中的条件,程序会将其附加到新列表中?

使用 Python 截断并重新编号对应于特定 ID/组的列

如何从形状汇总图中提取实际值

有没有办法使用重采样矢量化添加缺失的月份?

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

python用户输入5个偶数并打印最大的

pip install mysqlclient 失败为 mysqlclient 运行 setup.py bdist_wheel ... 错误

Python - 使用 OpenCV 将字节图像转换为 NumPy 数组

活动屏幕上的 PyQt4 中心窗口

如何使我的课程在 Python 中非常可打印?

如何注释一个以另一个函数作为参数的函数?

Tkinter 窗口显示(无响应)但代码正在运行

如何使 Python3 成为 Geany 中的默认 Python

如何在 python 3.x 中禁用 ssl 判断?

如何使用已打开并使用登录凭据登录的浏览器

Django 教程 unicode 不起作用