为什么从django rest框架返回的JSON在响应中有正斜杠?

时间:2015-01-31 07:53:03

标签: python json django django-rest-framework

我的回复代码

from rest_framework.response import Response
import json
responseData = { 'success' : True }
return Response(json.dumps(responseData))

在执行curl或通过浏览器访问响应时的显示方式。

"{\"success\": true}"

为什么正斜线?如何删除它们?

1 个答案:

答案 0 :(得分:16)

您将数据呈现为JSON 两次。移除json.dumps()来电。

来自Django REST documentation

  

与常规HttpResponse对象不同,您不会使用呈现的内容实例化Response个对象。 而是传递未呈现的数据,可能包含任何Python原语。

然后Django REST框架负责为您生成JSON。由于您给它一个字符串,该字符串是JSON编码的再次

>>> import json
>>> responseData = { 'success' : True }
>>> print json.dumps(responseData)
{"success": true}
>>> print json.dumps(json.dumps(responseData))
"{\"success\": true}"

框架使用Content Negotiation来确定要使用的序列化格式;这样,您的API客户端也可以请求将数据编码为YAML或XML,例如。

另见Responses documentation

  

REST框架通过提供Response类来支持HTTP内容协商,该类允许您返回可以呈现为多种内容类型的内容,具体取决于客户端请求。