您的文件無效:在JSON中沒有像\y
這樣的轉義序列,並且裸露的反斜槓本身必須被轉義,因此:\\
。
如果可以的話,最簡單的解決方法是通過轉義該反斜槓來修復文件,使其成爲有效的JSON。
如果由於某種原因,你不能,也可以編寫一個包裝爲json.loads()
映入此特定錯誤,並修補了原文:
import json
from json.decoder import JSONDecodeError
def permissive_json_loads(text):
while True:
try:
data = json.loads(text)
except JSONDecodeError as exc:
if exc.msg == 'Invalid \\escape':
text = text[:exc.pos] + '\\' + text[exc.pos:]
else:
raise
else:
return data
爲了簡單起見,上面的函數取一個字符串而不是文件。
這也是「大錘破解堅果」的方法,反覆嘗試加載整個JSON文檔並修復任何未轉義的反斜槓,因爲它找到了它們 - 這對於很少出現問題的小JSON文檔來說是合理的,但如果您正在處理大量JSON文檔以及大量這些未反轉的反斜槓錯誤,則不太合適。
這是在行動:
>>> print(text)
{
"host":"1.2.3.4",
"user":"abc",
"passwd":"s&]\yz$&u42/",
"dbname":"sample",
"port":2341
}
>>> config = permissive_json_loads(text)
>>> print(config['passwd'])
s&]\yz$&u42/
在你的情況,你會從你的文件轉換成字符串讀取,並調用該函數:
dbconn = "C:\abc.json"
with open(dbconn) as conn_file:
conn_doc = conn_file.read()
conn = permissive_json_loads(conn_doc)
順便說.. 。如果這是一個真正的密碼,你會想馬上改變它。 –
這是一個錯誤的密碼,所以它很好! – user3222101