为啥从 django rest 框架返回的 JSON 在响应中有正斜杠?
Posted
技术标签:
【中文标题】为啥从 django rest 框架返回的 JSON 在响应中有正斜杠?【英文标题】:Why does JSON returned from the django rest framework have forward slashes in the response?为什么从 django rest 框架返回的 JSON 在响应中有正斜杠? 【发布时间】:2015-03-30 17:33:32 【问题描述】:我的响应码
from rest_framework.response import Response
import json
responseData = 'success' : True
return Response(json.dumps(responseData))
它在执行curl
或通过浏览器访问响应时的显示方式。
"\"success\": true"
为什么是正斜杠?如何删除它们?
【问题讨论】:
这是双重编码的 JSON;编码 JSON 对象的 JSON 字符串。你确定你没有任何其他编码响应再次? 我使用的 Response 函数是由 django rest 框架实现的。 【参考方案1】:您将数据呈现为 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 内容协商,该类允许您返回可呈现为多种内容类型的内容,具体取决于客户端请求。
【讨论】:
以上是关于为啥从 django rest 框架返回的 JSON 在响应中有正斜杠?的主要内容,如果未能解决你的问题,请参考以下文章
为啥通过 django rest 框架注册用户时出现状态码错误
Django:从 Pandas 到 Django Rest 框架的模型查询集
为啥我在 POST 到 Django REST 框架时得到“CSRF cookie not set”?