You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现离线JSON修复与格式化工具?

修复格式错误的类JSON字符串并生成合法JSON

针对格式有缺陷的类JSON字符串,仅依赖json.loads的错误修复逻辑覆盖场景有限,更可靠的方式是通过正则提取键值对后重构合法JSON。以下是实现方案:

核心思路

  1. 用正则匹配所有"键":值格式的键值对,覆盖字符串(含转义字符)、布尔值、数字、空字符串等常见值类型
  2. 将提取的键值对转换为Python字典
  3. 利用json.dumps生成标准JSON格式

实现代码

import json
import re

def fix_and_parse_class_json(raw_str):
    # 匹配键值对的正则:键是双引号包裹的字符串,值支持布尔、数字、空字符串、带转义的字符串
    pattern = r'"([^"\\]*(?:\\.[^"\\]*)*)":\s*(true|false|null|\d+|"(?:\\.|[^"\\])*"|)'
    matches = re.findall(pattern, raw_str)
    
    result_dict = {}
    for key, value in matches:
        # 处理值的类型转换
        if value == 'true':
            parsed_value = True
        elif value == 'false':
            parsed_value = False
        elif value == 'null':
            parsed_value = None
        elif value.isdigit():
            parsed_value = int(value)
        elif value.startswith('"') and value.endswith('"'):
            # 去除首尾引号并处理转义
            parsed_value = value[1:-1].encode('utf-8').decode('unicode_escape')
        else:
            parsed_value = value  # 空字符串等情况
        
        result_dict[key] = parsed_value
    
    # 生成格式化的合法JSON
    return json.dumps(result_dict, indent=2, ensure_ascii=False)

# 测试示例
raw_data = '''{"PSInstall":false,"DeviceID":"","RootBlock":false,"MobileData":false,"ExpireDate":1669794843523,"Message":"Follow me on telegram\nhttps:\/\/t.me\/channel\nFollow me on YouTube\nhttps:\/\/youtube.com\/channel\/channel","Payload":"www.example.com","SSLProxy":"","isDirect":false,"isSSL":true,"isSSLProxy":false,"isWS":true,"isDNS":false,"Server":""}'''
print(fix_and_parse_class_json(raw_data))

说明

  • 该方案能处理大部分常见的类JSON格式问题:比如缺失逗号、引号不完整(部分场景)、多余空白等
  • 正则表达式覆盖了JSON中常见的值类型,包括带转义字符的字符串(如示例中的换行和斜杠转义)
  • 最终生成的JSON完全符合标准格式,可直接被json.loads解析

原代码的局限性

原代码仅处理了逗号和冒号缺失的单一错误场景,对于引号不闭合、转义错误、值类型解析错误等情况无法处理,而正则提取的方式更灵活,能覆盖更多格式缺陷场景。

内容的提问来源于stack exchange,提问作者Max Escorpion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:10:32