在json输出中跳出正斜杠

我有一个python服务器端应用程序,它生成一个简单的HTML页面,其中包含大量的客户端JavaScript,根据分配给js变量的大量的JSON数据生成客户端向用户显示的DOM树。 一些JSON数据包含字符串,其中一些包含HTML标签。 这一切都归结为这样的事情:

<html>
...
var tmp = "<p>some text</p>";
...
</html>

不出所料,上述内容不起作用,因为它应该看起来像下面这样使浏览器的HTML解析器很高兴:

<html>
...
var tmp = "<p>some text</p>";
...
</html>

(注意逃脱的正斜杠)

插入到HTML中的JSON是使用python默认的json库生成的。 也就是说,使用json.dumps,它明确地设计为不会在字符串中转义正斜杠。

我试图继承json.JSONDecoder以覆盖它对python字符串的行为,但这不起作用,因为它不允许专门化基本python类型的序列化。

我试图使用各种其他python json库,但没有多少运气:似乎由于大多数人讨厌逃脱的正斜杠,所以大多数库不会生成它们。

在调用json.dumps之前,我可以在将它们填充到我的python数据结构中之前手动将它们转义出来。 我也可以编写一个函数来递归迭代数据结构,找到字符串,并自动转义它们(长期来看更好)。 我可能会在json.dumps生成的字符串之前将其填充到HTML中(我不确定这是否会导致无效的JSON被插入到HTML中)。

这导致我的问题:是否有一个json序列化库,可以强制转义python字符串中的正斜杠?


我发现的最好方法就是对结果字符串进行替换。

out = json.dumps(obj)
out = out.replace("/", "/")

在JSON规范中可以选择转义正斜杠,这样做可以确保您不会通过字符串中的"</script>"攻击获得位。

链接地址: http://www.djcxy.com/p/47145.html

上一篇: escaping forward slashes in json output

下一篇: decoding json string in python