Python中的simplejson引发值错误
我有一个JSON字符串,发布到我的Python脚本。这是一个例子字符串:Python中的simplejson引发值错误
{"uid":"1111111","method":"check_user"}
在我的Python代码,我只需拨打simplejson.loads(str)
其中str
是从请求JSON字符串。 JSON字符串看起来很好,因为当我在请求时打印它时,它完好无损。然而,我得到一个ValueError:
Extra data: line 1 column 41 - line 1 column 48 (char 41 - 48)
Traceback (most recent call last): File
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/_webapp25.py",
line 703, in __call__
handler.post(*groups) File "/Users/.../app/controller/api_controller.py", line 25, in post
req = simplejson.loads(req) File
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/utils/simplejson/__init__.py",
line 232, in loads
return cls(encoding=encoding, **kw).decode(s) File
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/utils/simplejson/decoder.py",
line 254, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
任何想法可能是什么?我尝试从字符串中删除新行,制表符和斜线,甚至使用它解码.decode('string_escape')
您的字符串中有一些不可打印的字符。我得到同样的错误,如果我一个空字节追加到字符串的结尾,并print
荷兰国际集团它不显示问题:
>>> import json
>>> string = '{"uid":"1111111","method":"check_user"}\x00'
>>> print string
{"uid":"1111111","method":"check_user"}
>>> print repr(string)
'{"uid":"1111111","method":"check_user"}\x00'
>>> json.loads(string)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python27\Lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "C:\Python27\Lib\json\decoder.py", line 369, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 39 - line 1 column 40 (char 39 - 40)
打印您的字符串的repr
在请求时,你应该看到它。
太棒了!那么我怎么把它们从琴弦上剪掉呢? –
其实,它使用:str.replace('\ x00','') –
@AhmedNuaman - 它不一定在字符串的末尾。这很可能就是每次都这样做的坏角色。我会找出哪一个带有'repr',然后执行'json.loads(mystring.replace('\ x00','')',无论字符/字符的值是否为'\ x00' 。 – agf
这里的堆栈跟踪没有帮助。尽量减少范围,可能会帮助您识别错误。或者尝试放置打印以确保值是正确的。如果没有帮助,请尝试消除依赖关系,理想情况下将所有内容放在单个文件中并重新发布。 –
@RomanHwang其实,这是回答问题所需的所有信息。他解释说,他知道这是字符串的(可打印部分)传递给JSON,因为他正在打印它,并且他提供了错误。 – agf