これは、Django 1.7。で追加され、_json.dumps
_のラッパーであるJSONResponse
を返すときに発生します。ただし、この場合、エラーが発生します。データが正しく、Pythonシェルを介して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')])
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)