【问题标题】: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 框架实现的。

标签: python json django django-rest-framework


【解决方案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 内容协商,该类允许您返回可呈现为多种内容类型的内容,具体取决于客户端请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2017-08-21
    • 2014-01-30
    • 2020-11-13
    • 2019-10-29
    相关资源
    最近更新 更多