您的文件无效:在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