json.dumps():转义正斜杠

kay*_*kay 6 python serialization json escaping python-2.7

由于正斜杠只能出现在JSON序列化对象内的字符串中,因此不会使用转义(在默认设置中)

json.dump(some_dict).replace('/', r'\/')
Run Code Online (Sandbox Code Playgroud)

可靠的工作,但它看起来很hacky.

我知道正向斜线不必逃脱,但你可以逃脱它们,对于我的用例,我想让它们逃脱.

有没有办法让JSONEncoder在不手动转义它们的情况下转义正斜杠?

boz*_*mob 6

仅在encode_html_chars = True时转义正斜杠

看看这个 - https://github.com/esnme/ultrajson/pull/114

JSON规范说正斜杠应该隐式转义.

这是在JSONEncoder本身中执行此操作的解决方案.它只是你创建一个ESCAPE DICTIONARY并事先进行计算并稍后进行编码.

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',
}
Run Code Online (Sandbox Code Playgroud)


rad*_*tek 5

escape_forward_slashes按照 ujson 文档使用,

escape_forward_slashes 控制是否转义正斜杠 (/)。默认为 True:

>>> ujson.dumps("http://esn.me")
'"http:\/\/esn.me"'
>>> ujson.dumps("http://esn.me", escape_forward_slashes=False)
'"http://esn.me"'
Run Code Online (Sandbox Code Playgroud)

这里