ファイルが無効です:\y
というJSONのエスケープシーケンスはありません。ベアバックスラッシュ自体をエスケープする必要があります。\\
。
最も簡単な解決策は、そのバックスラッシュをエスケープすることによって、有効な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