ValueError:无效\ escape无法从文件

时间:2017-10-15 06:49:33

标签: python json

我在python中加载用户和密码的json文件时遇到问题,从其余api中检索数据,后者使用身份验证从url中提取json数据。

当我将用户,密码和uri放在json文件中并运行脚本时,它在json库中给出了这个错误:

Traceback (most recent call last):
  File "C:/Python27/Script.py", line 10, in <module>
    config = json.load(config_file) 
  File "C:\Python27\lib\json\__init__.py", line 290, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\Python27\lib\json\__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid \escape: line 7 column 42 (char 270)

这是代码:

import urllib2
import json

 #Load the config file
with open('Config.json') as config_file :    
    config = json.load(config_file) 
# Load your username from the config file
user = config['user']
# Load your password from the config file
password = config['password']

enter code here

从中加载样本的json文件位于:

{
    "user" : "api",
    "password" : "admin1234",
    "uri": "https://datafeeds.emailsecurity.com/test",
    "resetUri": "https://datafeeds.emailsecurity.com/test/test?reset=2017-07-01T00:00:00Z",
    "files" : {
        "cookiesFilePath" : "C:\\abc",
        "logsFilePath" : "C:\\abc",
    }
}

3 个答案:

答案 0 :(得分:1)

问题是其他人所说的双反斜杠。 您想转义两个反斜杠,例如:

bad_str = '{"a" : "C:\\ b"}'
good_str = '{"a" : "C:\\\\ b"}'

#JSONDecodeError
print(json.loads(bad_str))

# OK
print(json.loads(good_str))

答案 1 :(得分:0)

数据文件包含无效的json:

>>> json.loads('{"cookiesFilePath": "C:\\abc"}') 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>                                                                                                
  ...                                                                                             
ValueError: Invalid \escape: line 1 column 24 (char 23)

问题是"c:\\abc"字符串。 json解码器将双反斜杠解释为转义的单反斜杠,使冒号'\a'后面的字符变为无效的json。

使用标准python json编码器在您的示例中生成json是不可能的:

>>> json.dumps({"cookiesFilePath": "C:\abc"})                                                                            
'{"cookiesFilePath": "C:\\u0007bc"}'                                                                                                 
>>> json.dumps({"cookiesFilePath": "C:\\abc"})                                                                
'{"cookiesFilePath": "C:\\\\abc"}' 

表示文件中的json是使用损坏的工具创建的,或者是手动编辑的。

答案 2 :(得分:0)

{
    "user" : "api",
    "password" : "admin1234",
    "uri": "https://datafeeds.emailsecurity.com/test",
    "resetUri": "https://datafeeds.emailsecurity.com/test/test?reset=2017-07-01T00:00:00Z",
    "files" : {
        "cookiesFilePath" : "C:\\abc",
        "logsFilePath" : "C:\\abc"
     }
}

在json文件中尝试不使用逗号。

带逗号:

"logsFilePath" : "C:\\abc",

结尾没有逗号:

"logsFilePath" : "C:\\abc"