JSON渲染器不会序列化:b'{"id":"11122211133311"}' JSON 不可序列化
JSONRenderer won't serialize: b'{"id":"11122211133311"}' is not JSON serializable
我在使用 JSONRenderer 序列化对象时遇到问题。
我正在使用 django-rest-framework
并且我已经序列化了对象:
pk = kwargs['pk']
tube = Tube.objects.get(id=pk)
serialized_tube = TubeSerializer(tube)
serialized_tube.data
看起来像这样:
{'id': '11122211133311'}
不幸的是我不能使用 JSONRenderer 序列化它,因为代码
tube_json = JSONRenderer().render(serialized_tube.data)
return Response(tube_json)
给出以下错误
b'{"id":"11122211133311"}' is not JSON serializable
而
tube_json = json.dumps(serialized_tube.data)
return Response(tube_json)
效果不错...
我正在使用 Python3.4.3
问题不在您的 JSONRenderer()
行中,而是在您 return 它下面的行中 Response
.
Django REST 框架提供了一个自定义 Response
对象,该对象将自动呈现为接受的渲染器,将原生 Python 结构转换为渲染版本(在本例中,JSON 结构)。所以 Python 字典将被转换为 JSON 对象, Python 列表将被转换为 JSON 数组,等等
现在您正在将数据序列化为 JSON 字符串 然后 将其传递给 Response
,您希望它在此处被重新序列化进入 JSON。您不能将字符串序列化为 JSON(您需要一个对象或数组来包装它),这就是您看到错误的原因。
解决方法是不提前调用JSONRenderer
,直接将序列化数据传给Response
。
我在使用 JSONRenderer 序列化对象时遇到问题。
我正在使用 django-rest-framework
并且我已经序列化了对象:
pk = kwargs['pk']
tube = Tube.objects.get(id=pk)
serialized_tube = TubeSerializer(tube)
serialized_tube.data
看起来像这样:
{'id': '11122211133311'}
不幸的是我不能使用 JSONRenderer 序列化它,因为代码
tube_json = JSONRenderer().render(serialized_tube.data)
return Response(tube_json)
给出以下错误
b'{"id":"11122211133311"}' is not JSON serializable
而
tube_json = json.dumps(serialized_tube.data)
return Response(tube_json)
效果不错...
我正在使用 Python3.4.3
问题不在您的 JSONRenderer()
行中,而是在您 return 它下面的行中 Response
.
Django REST 框架提供了一个自定义 Response
对象,该对象将自动呈现为接受的渲染器,将原生 Python 结构转换为渲染版本(在本例中,JSON 结构)。所以 Python 字典将被转换为 JSON 对象, Python 列表将被转换为 JSON 数组,等等
现在您正在将数据序列化为 JSON 字符串 然后 将其传递给 Response
,您希望它在此处被重新序列化进入 JSON。您不能将字符串序列化为 JSON(您需要一个对象或数组来包装它),这就是您看到错误的原因。
解决方法是不提前调用JSONRenderer
,直接将序列化数据传给Response
。