2017-10-15 63 views
1

我有一個問題在python中加載用戶和密碼的json文件,以從其餘api中檢索數據,該API使用認證從url中提取json數據。ValueError:無效轉義無法從文件加載json

當我已經把用戶名,密碼和URI在JSON文件並運行腳本它給我這個錯誤的JSON libary:

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", 
    } 
} 
+0

這很奇怪。我沒有得到'Invalid \ escape'錯誤,但是由於'「logsFilePath」末尾的逗號引起'ValueError:Expecting property name':'C:\\ abc「,'。 JSON不是Python,它不允許在列表或對象的末尾使用尾隨逗號(相當於Python字典)。一旦我解決了這個問題,你的數據在Python 2.6.6和Python 3.6.0中可以正常加載 –

回答

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。

這是不可能使用標準蟒JSON編碼器,以產生在您的示例的JSON:

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

這表明在文件中的JSON已經使用刀具破損產生,或手動編輯。

+0

你好蛇可以在python中建議其他任何模塊,可以用來解決這個問題我嘗試你提到的方式 –

+0

不是真的 - 您需要修復生成輸入數據的任何內容,以便生成有效的JSON。 – snakecharmerb