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