栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何自动修复无效的JSON字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何自动修复无效的JSON字符串?

@Michael的回答给了我一个主意……这不是一个很漂亮的主意,但是它似乎可以工作,至少在您的示例中有效:尝试解析JSON字符串,如果失败,则查找失败的字符。异常字符串1并替换该字符。

while True:    try:        result = json.loads(s)   # try to parse...        break         # parsing worked -> exit loop    except Exception as e:        # "Expecting , delimiter: line 34 column 54 (char 1158)"        # position of unexpected character after '"'        unexp = int(re.findall(r'(char (d+))', str(e))[0])        # position of unescaped '"' before that        unesc = s.rfind(r'"', 0, unexp)        s = s[:unesc] + r'"' + s[unesc+1:]        # position of correspondig closing '"' (+2 for inserted '')        closg = s.find(r'"', unesc + 2)        s = s[:closg] + r'"' + s[closg+1:]print result

您可能需要添加一些其他检查,以防止此操作以无限循环结束(例如,与字符串中的字符一样,最大重复次数)。
另外,

"
如@gnibbler所指出的那样,如果错误的后面实际上是逗号,这仍然将不起作用。

更新: 这似乎是工作 相当
现在好了(虽然还不够完善),即使转义

"
后跟一个逗号,或者在这种情况下,闭架的,因为它可能会获得有关(预期属性名后,语法错误投诉等)并追溯到最后一个
"
。它还自动转义相应的结束符
"
(假设存在一个)。


1)例外

str
"Expecting , delimiter: line XXX column YYY (charZZZ)"
,其中ZZZ是字符串中发生错误的位置。但是请注意,该消息可能取决于Python的版本,
json
模块,操作系统或语言环境,因此可能必须相应地调整此解决方案。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427515.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号