我尝试使用SharePoint 2010的REST API,直到遇到这个问题时才开始使用它:
Traceback (most recent call last):
File "TestJSON.py", line 21, in <module>
json.loads(s)
File "c:\Python33\lib\json\__init__.py", line 316, in loads
return _default_decoder.decode(s)
File "c:\Python33\lib\json\decoder.py", line 351, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\Python33\lib\json\decoder.py", line 367, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting ',' delimiter: line 1 column 14 (char 13)
测试用例:
import json
s='''{"etag": "W/\"1\""}'''
json.loads(s)
Python 3.3.5给出了同样的错误。我在JSON库中发现了一个错误吗?
更新
我得到的实际错误(受影响的部分之前)是:
>>>>>>Err:tration?$filter=Modified%20gt%20datetime\'2014-04-30T00:00:00.000Z\'&$orderby=Mo<<<<<<<
Traceback (most recent call last):
File "TestURL.py", line 41, in <module>
j = json.loads(body)
File "c:\Python33\lib\json\__init__.py", line 316, in loads
return _default_decoder.decode(s)
File "c:\Python33\lib\json\decoder.py", line 351, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\Python33\lib\json\decoder.py", line 367, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid \escape: line 4005 column 114 (char 314020)
这
body = response.read().decode("utf-8")
print(">>>>>>Err:{}<<<<<<<".format(body[314020-40:314020+40]))
答案 0 :(得分:3)
字符串文字未正确转义。确保字符串真正代表JSON。
>>> s = r'''{"etag": "W/\"1\""}''' # NOTE: raw string literal
>>> json.loads(s)
{'etag': 'W/"1"'}
答案 1 :(得分:1)
\'
序列是无效的JSON 。单引号不需要转义,这使其无效string escape。
您可以尝试在事后修复它:
import re
data = re.sub(r"(?<!\\)\\'", "'", data)
在使用JSON加载之前。这会将\'
替换为普通'
,前提是反斜杠不会被之前的\
转义。
由于单引号只能 出现在字符串值中,所以这应该是安全的。