json - JSONRenderer无法序列化:b'{“id”:“11122211133311”}}不可JSON序列化

标签 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

最佳答案

问题不在您的JSONRenderer()行中,而是在它下面的行中以Response形式返回。

Django REST框架提供了一个自定义的Response对象,该对象将自动以与接受的渲染器相同的方式进行渲染,从而将本机Python结构转换为渲染版本(在本例中为JSON结构)。因此,Python词典将转换为JSON对象,Python列表将转换为JSON数组,依此类推。

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

解决方案是不提前调用JSONRenderer,而只是将串行器数据传递给Response

关于json - JSONRenderer无法序列化:b'{“id”:“11122211133311”}}不可JSON序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404594/

相关文章:

java - 使用java更新json对象

javascript - 在 Node 中重新构建 JSON 树

python - Django 找不到项目应用程序 - 无法导入 x_app

python - 过滤外键日期 django_filters

java - 对象序列化为 JSON(使用 Gson)。如何在 UpperCamelCase 中设置字段名称?

javascript - 如何将局部变量值赋给函数的变量 [Three.js] JSON Loader

json - 在redis中通过lua脚本编辑json对象

django - BASE_DIR 返回设置路径而不是项目路径(django 1.10)

java - 如何在 Java 中将二进制数据转换为字符串并返回?

c# - 泛型 + XML 序列化 + 自定义对象