Python Json错误:";结束是不允许的;?

Python Json错误:";结束是不允许的;?,python,json,Python,Json,我有个不明白的问题。我通过Redis(作为队列)以字符串形式发送json数据,接收方抛出以下错误: [ERROR JSON (in queue)] - {"ip": null, "domain": "somedomain.com", "name": "Some user name", "contact_id": 12345, "signature": "6f496a4eaba2c1ea4e371ea2c4951ad92f41ddf45ff4949ffa761b0648a22e38"} =>

我有个不明白的问题。我通过Redis(作为队列)以字符串形式发送json数据,接收方抛出以下错误:

[ERROR JSON (in queue)] - {"ip": null, "domain": "somedomain.com", "name": "Some user name", "contact_id": 12345, "signature": 
"6f496a4eaba2c1ea4e371ea2c4951ad92f41ddf45ff4949ffa761b0648a22e38"} => end is out of bounds
引发异常的代码如下所示:

try:
    item = json.loads(item[1])
except ValueError as e:
    sys.stderr.write("[ERROR JSON (in queue)] - {1} => {0}\n".format(str(e), str(item)))
    return None
>>> import json
>>> s = '{"ip": null, "domain": "somedomain.com", "name": "Some user name", "contact_id": 12345, "signature": "6f496a4eaba2c1ea4e371ea2c4951ad92f41ddf45ff4949ffa761b0648a22e38"}'
>>> print s
真正奇怪的是,如果我打开python控制台并执行以下操作:

try:
    item = json.loads(item[1])
except ValueError as e:
    sys.stderr.write("[ERROR JSON (in queue)] - {1} => {0}\n".format(str(e), str(item)))
    return None
>>> import json
>>> s = '{"ip": null, "domain": "somedomain.com", "name": "Some user name", "contact_id": 12345, "signature": "6f496a4eaba2c1ea4e371ea2c4951ad92f41ddf45ff4949ffa761b0648a22e38"}'
>>> print s
我没有问题,字符串(在Python控制台中复制/粘贴)根本不会产生错误,但我的原始代码会抛出一个错误


您知道问题的原因吗?

您正在加载
项[1]
,这是字符串
项的第二个字符:

>>> json.loads('"')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: end is out of bounds

您正在加载
项[1]
,这是字符串
项的第二个字符:

>>> json.loads('"')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: end is out of bounds

但真正奇怪的是,这个问题只发生过几次
item
是一个元组,包含0中Redis的键和1中的值(json数据)。有时候,json值在完整项中,我不知道为什么。这不是你问题的一部分。你应该问一个新问题,为什么Redis返回一个字符串而不是元组。是的,你是对的,你的答案对我的问题来说是正确的,所以我接受了它,并对tit进行了投票。但真正奇怪的是,这个问题只发生了几次
item
是一个元组,包含0中Redis的键和1中的值(json数据)。有时候,json值在完整项中,我不知道为什么。这不是你问题的一部分。你应该问一个新问题,为什么Redis返回一个字符串而不是元组。是的,你是对的,你的答案对我的问题来说是正确的,所以我接受了它,并投了一个更高的票。