由于正斜杠只能出现在JSON序列化对象内的字符串中,并且未进行转义(在默认设置中),因此使用
json.dump(some_dict).replace('/', r'\/')
可靠地工作,但它看起来很糟糕。
我知道正向斜线不必逃脱,但你可能逃脱它们,对于我的用例,我想要他们逃脱了。
有没有办法让JSONEncoder在不手动转义的情况下转义正斜杠?
答案 0 :(得分:6)
仅在encode_html_chars = True
时转义正斜杠看看这个 - https://github.com/esnme/ultrajson/pull/114
JSON规范说正斜杠应该隐式转义。
这是在JSONEncoder本身中执行此操作的解决方案。它只是你创建一个ESCAPE DICTIONARY并预先进行计算并稍后进行编码。
希望它有所帮助。
-
添加上述解决方案,还有另一个逃避角色的原因。正如 kay 所说,它给了我们一些额外的睡眠。它可以防止攻击。因此,上述解决方案可以解决所有问题。
ESCAPE_DCT = {
# escape all forward slashes to prevent </script> attack
'/': '\\/',
'\\': '\\\\',
'"': '\\"',
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
}
答案 1 :(得分:1)
根据ujson文档使用escape_forward_slashes
escape_forward_slashes 控制是否对正斜杠(/)进行转义。默认值为True:
>>> ujson.dumps("http://esn.me")
'"http:\/\/esn.me"'
>>> ujson.dumps("http://esn.me", escape_forward_slashes=False)
'"http://esn.me"'
请参见here。