【问题标题】:Django HttpResponse strips JSON of double escapes breaks jQueryDjango HttpResponse 剥离 JSON 的双重转义符打破了 jQuery
【发布时间】:2012-05-25 19:07:49
【问题描述】:

我遇到了一个关于 JSON 和 Django 的有趣问题。我想我已经把它缩小到这个问题了。问题是我有一个类似这样的 JSON 对象:

{"embed": "<iframe width='640' height='360' src='http://www.youtube.com/embed/Sw5Gk1L4LQE?wmode=opaque' frameborder='0' allowfullscreen></iframe>"}

在 PDB 中,如果我将其打印为 simplejson.dumps,我会得到这个(注意双引号):

{"embed": "<iframe width=\\"640\\" height=\\"360\\" src=\\"http://www.youtube.com/embed/Sw5Gk1L4LQE?wmode=opaque\\" frameborder=\\"0\\" allowfullscreen></iframe>"}

实际的 HttpResponse 对象已经从每组这样的双重转义中删除了一个斜杠。

return HttpResponse(simplejson.dumps(result), 'application/json'

{"embed": "<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/Sw5Gk1L4LQE?wmode=opaque\" frameborder=\"0\" allowfullscreen></iframe>"}

在客户端上,我使用的是 jQuery 的 parseJSON,但我遇到了具有单个转义字符(第 3 个)的问题,因为它没有将它们视为转义。但它是实际有效的 JSON,当我直接在控制台中尝试 parseJSON 时,第二个有效,但它实际上不是有效的 JSON(根据 JSONLint.com)。

关于如何将这个 JSON 对象从 Django 获取到客户端并保持嵌入代码完整的任何想法?我希望这对我来说是一个小的过度网站。

【问题讨论】:

  • 显示使用 parseJSON 的代码。响应中 embed 属性的值不是 json。它是一个字符串。您是否有可能尝试将其解析为 json?以我的经验,使用像 Fiddler2 这样的工具来检查在线上发送和接收的消息是非常宝贵的。 dinochiesa.net/?p=93
  • 感谢您的建议,但我做错了几件事,最终导致非常混乱的错误和调试。我相信我已经清除了所有内容,您可以在下面的新消息中看到这一点。

标签: jquery django json


【解决方案1】:

好吧,一个小时后,我终于意识到我在这方面犯了几个小错误,导致大多数事情都崩溃了。我在本地加载页面,而不是通过 Django 提供它(只是为了测试我正在做的 jQuery Mobile 的东西)。

在该本地文件中,我复制/粘贴了 Django 中 JSON 视图的输出。

我尝试对该视图使用 JSONP 调用,但由于 jQuery JSONCallback,它会引发错误。

最后,测试这个的正确方法是通过 Django 提供 HTML,这样我就不必使用 JSONP,当我这样做时,parseJSON 接受了具有单转义双引号 \" 的 JSON,因为它应该是不会接受复制和粘贴,因为那不是响应对象。

希望我的错误将来能帮助其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多