simplejson.loads()获取无效\ escape:'x'

kkp*_*ern 7 python escaping simplejson

我正在学习如何使用simplejson解码JSON文件.但我遭遇了"无效\逃脱"错误.这是代码

import simplejson as json

def main():
    json.loads(r'{"test":"\x27"}')

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

这是错误信息

Traceback (most recent call last):
  File "hello_world.py", line 7, in <module>
    main()
  File "hello_world.py", line 4, in main
    json.loads(r'{"test":"\x27"}')
  File "C:\Users\zhangkai\python\simplejson\__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "C:\Users\zhangkai\python\simplejson\decoder.py", line 335, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\zhangkai\python\simplejson\decoder.py", line 351, in raw_decode

    obj, end = self.scan_once(s, idx)
  File "C:\Users\zhangkai\python\simplejson\scanner.py", line 36, in _scan_once
    return parse_object((string, idx + 1), encoding, strict, _scan_once, object_
hook)
  File "C:\Users\zhangkai\python\simplejson\decoder.py", line 185, in JSONObject

    value, end = scan_once(s, end)
  File "C:\Users\zhangkai\python\simplejson\scanner.py", line 34, in _scan_once
    return parse_string(string, idx + 1, encoding, strict)
  File "C:\Users\zhangkai\python\simplejson\decoder.py", line 114, in py_scanstr
ing
    raise ValueError(errmsg(msg, s, end))
ValueError: Invalid \escape: 'x': line 1 column 10 (char 10)
Run Code Online (Sandbox Code Playgroud)

我认为json解析器应该识别转义.所以我想知道什么是错的,我该怎么办.

T.J*_*der 11

JSON没有\xNN像某些语言(包括JavaScript)和符号那样的十六进制转义(),详情请参见此处.它有一个unicode转义符,\uNNNN其中NNNN有四个十六进制数字,但没有\x十六进制转义符.

  • @ user308587:如果文件有"\ x"符号,则它不是JSON格式.如果你想接受无效的JSON,是的,你必须自己预先处理它.假设你想按照JavaScript的方式处理`\ x`,将`\ xNN`转换为`\ u00NN`(例如,'\ x27`变为`\ u0027`).FWIW,如何``x`和`\ u`由JavaScript处理 - **而不是**JSON - 由[ECMAScript规范]的第7.8.4节(http://www.ecma-international.组织/出版物/标准/ ECMA-262.htm).但我的阅读是真的只是将"x"改为"u"并添加前导零.最好, (7认同)

Que*_*tin 5

这是解析器的预期行为,因为 JSON 无效;在字符串中,斜杠后面只能跟"\/bfnrtu(后面必须跟 4 个十六进制字符)。不允许x请参阅http://json.org/上的规范