8

simplejsonを使用してJSONファイルをデコードする方法を学んでいます。しかし、「無効な\escape」エラーが発生しました。これがコードです

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パーサーはエスケープを認識することになっていると思います。だから私は何が悪いのか、そして私は何をすべきかを知りたいのです。

4

3 に答える 3

12

JSONには、\xNN一部の言語(JavaScriptを含む)や表記法のように16進エスケープ()がありません。詳細はこちらをご覧ください。Unicodeエスケープがあります。\uNNNNここで、NNNNは4桁の16進数ですが、\x16進数のエスケープはありません。

于 2010-11-28T08:51:45.937 に答える
4

JSONが無効であるため、これはパーサーから予想される動作です。文字列内では"、スラッシュの後には、、、、、、、、、、またはのみを続けることができます(その後に4つの16進文字を続ける必要があります)。は許可されていません。http://json.org/で仕様を参照してください\/bfnrtux

于 2010-11-28T08:52:12.753 に答える
0

python-cjsonを試してください

import cjson
s = cjson.encode({'abc':123,'def':'xyz'})
print 'json: %s - %s' % (type(s), s)
s = cjson.decode(s)
print '%s - %s' % (type(s), s)
于 2012-06-14T00:08:09.270 に答える