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

Sai*_*hna 6 python django json django-rest-framework

我的回复代码

from rest_framework.response import Response
import json
responseData = { 'success' : True }
return Response(json.dumps(responseData))
Run Code Online (Sandbox Code Playgroud)

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

"{\"success\": true}"
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 17

您将数据呈现为JSON 两次.移除你的json.dumps()电话.

Django REST文档:

与常规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}"
Run Code Online (Sandbox Code Playgroud)

该框架使用内容协商来确定要使用的序列化格式; 这样,您的API客户端也可以请求将数据编码为YAML或XML.

另请参阅Responses文档:

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