JSONRenderer不会序列化:b'{“id”:“11122211133311”}'不是JSON可序列化

时间:2015-07-14 10:52:34

标签: json django serialization django-rest-framework

我在使用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

1 个答案:

答案 0 :(得分:2)

问题不在您的JSONRenderer()行中,而是在下面的行中,您将其作为Response返回。

Django REST框架提供了一个自定义Response对象,该对象将自动呈现为接受的渲染器,将原生Python结构转换为渲染版本(在本例中为JSON结构)。因此,Python字典将转换为JSON对象,Python列表将转换为JSON数组等。

现在您将数据序列化为JSON字符串然后将其传递给Response,您希望将其重新序列化为JSON。您不能将字符串序列化为JSON(您需要一个包装它的对象或数组),这就是您看到错误的原因。

解决方案是不提前致电JSONRenderer,只需将序列化数据传递给Response