python - 我怎样才能让 Django 返回 JsonResponse 而没有额外的引号或引号转义?

标签 python json django

使用 Django 1.7,每当我在 View 中返回以下 JsonResponse 时:

from django.http import JsonResponse
token = "1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9="
response = JsonResponse({"token": token})
return response

我从网络浏览器/cURL 收到以下 HTTP 响应:

"{\"token\": \"1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9=\"}"

我想要的,以及我在 Django 1.3 中拥有的是:

{"token": "1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9="}

我有两个生产中的移动应用程序依赖于使用 Django 的私有(private) API,不幸的是,他们期待第二种响应,没有额外的引号(引号包围整个 JSON 使其成为一个字符串)并且没有引号逃脱。

我的问题是,是否有一些内置方法可以强制 Django 响应不转义 JSON 响应?

我编写了以下中间件来完成它,但是......这似乎是一种非常脆弱的蛮力方式:

class UnescapeJSON(object):
    def process_response(self, request, response):
        """
        Directly edit response object here, searching for and replacing terms
        in the html.
        """
        if re.search('^/api/.*', request.path):
            r = response.content
            r = r.replace('\\', '')
            r = r.lstrip('"')
            r = r.rstrip('"')
            response.content = r
        return response

所以我希望有更聪明的方法。

背景故事是我正在尝试将旧的遗留代码库从 Django 1.3 更新到 1.8。我目前在我的本地开发环境中使用 1.7。 Django 1.3 以正确的方式返回 JSON,没有额外的引号和反斜杠。

以这种方式返回 JSON 的一个好处是:

{"token": "1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9="}

...是我正在使用 jQuery.post({success:...}) 来处理这个 JSON 响应,它会自动运行 jQuery.parseJSON() 对我来说,把它变成一个我可以用点符号访问的 JSON 对象。

我不能只在客户端修复字符串并手动重新运行 parseJSON(),因为这将涉及让我的所有用户升级他们的移动应用程序。

所以我必须按照上面的格式获取 JSON,否则我的移动 API 就会被破坏。

我应该补充一点信息。这个 API 使用的是 Django Piston :(。我使用的是我发现的 1.7x 兼容版本。我现在不可能在 Django REST Framework 中交换。相信我,我会尽快。

最佳答案

对于那些在 Google 上找到此线程的人,放弃 JsonResponse。如果您尝试使用 jsonp,则会抛出错误

"TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False"

如果您将 safe 设置为 False,您将收到带有引号的响应,然后在客户端失败。相反

return HttpResponse(response_data, content_type='application/json')

关于python - 我怎样才能让 Django 返回 JsonResponse 而没有额外的引号或引号转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655567/

相关文章:

django - 数据库不存在 postgresql

javascript - Ajax - JSON 响应无法很好地读取 ids 数组

python - 如何从列表创建 URL 参数

python - 如何通过 python 将我的 xlsx 文件批量转换为 CSV

python - 语法错误: can't assign to function call with append

php - 单击时为 Highcharts 生成有效的 JSON

java - Hibernate 上 @JsonIgnore 的 Jsonparsing 错误

python - Django FilteredSelectMultiple 不在页面上呈现

python - 如何在 Python 中选择性地传递带有非默认值的参数?

python - 如何在Hadoop中迭代MapReduce? (lang:python)