json.dumps():转义正斜杠



由于正斜杠只能出现在 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"'

看这里。

最新更新