您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

如何自动修复无效的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 (char ZZZ)",其中ZZZ是字符串中发生错误的位置。但是请注意,该消息可能取决于Python的版本,json模块,操作系统或语言环境,因此可能必须相应地调整此解决方案。

其他 2022/1/1 18:16:09 有575人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶