Python 3.4.1中的json模块错误?

时间:2014-06-24 15:11:41

标签: python json sharepoint-2010

我尝试使用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]))

2 个答案:

答案 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加载之前

。这会将\'替换为普通',前提是反斜杠不会被之前的\转义。

由于单引号只能 出现在字符串值中,所以这应该是安全的。