simplejson.loads() 得到 Invalid \escape: 'x'
我正在学习如何使用 simplejson 来解码 JSON 文件。但我遇到了“无效\转义”错误。 这是代码
import simplejson as json
def main():
json.loads(r'{"test":"\x27"}')
if __name__ == '__main__':
main()
这是错误消息
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)
我认为 json 解析器应该识别转义。所以我想知道出了什么问题,我应该做什么。
I am learning how to use simplejson to decode JSON file. But I suffered the "invalid \escape" error.
Here is the code
import simplejson as json
def main():
json.loads(r'{"test":"\x27"}')
if __name__ == '__main__':
main()
And here is the error message
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)
I think json parser is supposed to recognize the escape. So I want to know what is wrong, and what should I do.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JSON 没有像某些语言(包括 JavaScript)和符号那样的十六进制转义符 (
\xNN
),详细信息请参见此处。它有一个 unicode 转义符\uNNNN
,其中NNNN
是四个十六进制数字,但没有\x
十六进制转义符。JSON has no hex escape (
\xNN
) like some languages (including JavaScript) and notations do, details here. It has a unicode escape,\uNNNN
whereNNNN
is four hex digits, but no\x
hex escape.这是解析器的预期行为,因为 JSON 无效;在字符串中,斜杠后面只能跟随
"
、\
、/
、b
、f
、n
、r
、t
或u
(后面必须跟 4 个十六进制字符) 不允许使用x
。请参阅 http://json.org/This is expected behavior from a parser as that JSON is invalid; within a string a slash may be followed only by
"
,\
,/
,b
,f
,n
,r
,t
oru
(which must then be followed by 4 hex characters). Anx
is not allowed. See the spec at http://json.org/尝试 python-cjson
try python-cjson