由于正斜杠只能出现在 JSON 序列化对象内的字符串中,并且不会转义(在默认设置中),使用
json.dump(some_dict).replace('/', r'/')
可靠地工作,但它看起来很笨拙。
我知道正斜杠不必转义,但你可以转义它们,对于我的用例,我想转义它们。
有没有办法让 JSONEncoder 转义正斜杠而不手动转义它们?
仅在 encode_html_chars=True 时转义正斜杠
看看这个-https://github.com/esnme/ultrajson/pull/114
JSON 规范规定正斜杠应隐式转义。
这是在JSONEncoder本身中执行此操作的解决方案。只是你创建一个 ESCAPE 字典并事先进行计算,然后再进行编码。
https://chromium.googlesource.com/external/googleappengine/python/+/dc33addea2da464ca07e869cb11832e1ae82da9d/lib/django/django/utils/simplejson/encoder.py
希望对您有所帮助。
-
除了上述解决方案之外,还有另一个转义字符的原因。正如凯所说,它给了我们一些额外的睡眠。它可以防止攻击。因此,上面的解决方案可以解决所有问题。
ESCAPE_DCT = {
# escape all forward slashes to prevent </script> attack
'/': '\/',
'\': '\\',
'"': '\"',
'b': '\b',
'f': '\f',
'n': '\n',
'r': '\r',
't': '\t',
}
根据 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"'
看这里。