我对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,我遇到了一个有单个转义字符(第三个)的问题,因为它没有看到它们被转义。但它是实际有效的JSON,当我在控制台中直接尝试parseJSON时,第二个工作正常,但它实际上并不是有效的JSON(根据JSONLint.com)。
我可以做些什么来将Django中的这个JSON对象发送到客户端并使嵌入代码保持不变?我希望这对我来说是一个小小的错误。
答案 0 :(得分:0)
好一个小时后,我终于意识到我在这方面犯了几个小错误,这使得大多数事情都破裂了。我在本地加载页面而不是通过Django提供它(因此我可以测试我正在做的jQuery Mobile的东西)。
在该本地文件中,我在Django的JSON视图的输出中进行了复制/粘贴。
我尝试使用对该视图的JSONP调用,并且由于jQuery JSONCallback,它抛出了错误。
最后,测试这个的正确方法是通过Django提供HTML,这样我就不必使用JSONP了,当我这样做时,parseJSON接受了具有单个转义双引号的JSON \“它应该在哪里因为不是回复对象,所以不会接受复制和粘贴。
希望我的错误将来会帮助其他人。