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