我在使用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”}'不是JSON可序列化的
,而
tube_json = json.dumps(serialized_tube.data)
return Response(tube_json)
效果很好......
我正在使用Python3.4.3
答案 0 :(得分:2)
问题不在您的JSONRenderer()
行中,而是在下面的行中,您将其作为Response
返回。
Django REST框架提供了一个自定义Response
对象,该对象将自动呈现为接受的渲染器,将原生Python结构转换为渲染版本(在本例中为JSON结构)。因此,Python字典将转换为JSON对象,Python列表将转换为JSON数组等。
现在您将数据序列化为JSON字符串然后将其传递给Response
,您希望将其重新序列化为JSON。您不能将字符串序列化为JSON(您需要一个包装它的对象或数组),这就是您看到错误的原因。
解决方案是不提前致电JSONRenderer
,只需将序列化数据传递给Response
。