gpt4 book ai didi

python - 如何读取带有未转义反斜杠的 JSON 文件?

转载 作者:太空宇宙 更新时间:2023-11-03 15:57:52 24 4
gpt4 key购买 nike

我有一个包含连接字符串的 JSON 文件:

abc.json

{
"host":"1.2.3.4",
"user":"abc",
"passwd":"s&]\yz$&u42/",
"dbname":"sample",
"port":2341
}

这是我尝试读取数据的 Python 脚本:

 import psycopg2 as pg
dbconn = "C:\abc.json"
with open(dbconn) as conn_file:
conn = json.load(conn_file)

它给我这个错误:

json.decoder.JSONDecodeError: Invalid \escape: line 4 column 16 (char 53)

我该如何修复这个错误?

最佳答案

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

关于python - 如何读取带有未转义反斜杠的 JSON 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42207105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com