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

Python处理非JSON响应遇JSONDecodeError,正则修复及装饰器咨询

修复非标准JSON解析问题及装饰器实现方案

一、解决最后一项逗号注入的正则实现

针对你提到的"name":"value"后添加逗号(除非后接})的需求,可以通过正则正向预查实现,同时补充收尾的多余逗号清理逻辑:

import re

def fix_non_standard_json(raw_str):
    # 已实现的规则
    fixed = re.sub(r'{', ':{', raw_str)
    fixed = re.sub(r'}(?!})', '},', fixed)
    fixed = re.sub(r'(\w+):', r'"\1":', fixed)
    
    # 处理键值对后加逗号(排除后接}的情况)
    # 匹配完整键值对,且后面不是紧跟的}(允许空白字符)
    fixed = re.sub(r'(".*?":"[^"]*")(?!\s*})', r'\1,', fixed)
    
    # 清理多余逗号:比如键值对后直接跟}的情况
    fixed = re.sub(r',\s*}', '}', fixed)
    return fixed

关键说明

  • (".*?":"[^"]*")(?!\s*}):精准匹配"key":"value"格式的键值对,通过(?!\s*})确保后面没有紧跟的}(兼容中间有空格的场景)。
  • 最后一步的逗号清理是必要的,避免出现"key":"value",}这种非法格式。

二、用装饰器封装修复逻辑

可以把JSON修复+解析逻辑封装成装饰器,让所有需要处理这类响应的请求函数复用:

import json
import re
from functools import wraps

def auto_fix_json(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        raw_response = func(*args, **kwargs)
        # 执行修复逻辑
        fixed = re.sub(r'{', ':{', raw_response)
        fixed = re.sub(r'}(?!})', '},', fixed)
        fixed = re.sub(r'(\w+):', r'"\1":', fixed)
        fixed = re.sub(r'(".*?":"[^"]*")(?!\s*})', r'\1,', fixed)
        fixed = re.sub(r',\s*}', '}', fixed)
        
        # 尝试解析,失败则打印修复内容便于调试
        try:
            return json.loads(fixed)
        except json.decoder.JSONDecodeError:
            print(f"修复后仍无法解析的内容:\n{fixed}")
            raise
    return wrapper

# 使用示例
@auto_fix_json
def fetch_server_data():
    # 模拟返回非标准JSON的接口响应
    return '{ user:"Bob" age:"30" { address:"London" } }'

# 调用测试
try:
    parsed_data = fetch_server_data()
    print(parsed_data)
except Exception as e:
    print(f"解析失败:{e}")

装饰器的优势是逻辑与业务解耦,所有需要处理这类非标准响应的请求函数,只需添加装饰器即可,无需重复编写修复代码。

三、进阶调试与替代方案

如果正则修复后仍报错,建议:

  • 打印修复后的完整字符串,手动检查是否存在未闭合引号、特殊字符未转义等问题。
  • 对于复杂的非标准JSON,正则可能覆盖不全,可以直接使用支持宽松语法的第三方库,比如json5,它原生支持不带引号的键、末尾逗号、注释等非标准格式:
import json5

# 直接解析非标准JSON
parsed_data = json5.loads(raw_response)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:57:54