python代码修复字符串json数据格式问题,并将其按照字典形式读取

修复代码

python 复制代码
def aggressive_json_load(s):
    """
    终极修复:处理嵌套、残缺补齐、以及末尾多余的垃圾字符
    """
    if not isinstance(s, str): return None
    
    s = s.strip()
    if not (s.startswith('{') or s.startswith('[')): return None

    # 1. 尝试直接加载
    try:
        return json.loads(s)
    except json.JSONDecodeError:
        pass

    # 2. 括号平衡补齐逻辑
    def balance_json(text):
        stack = []
        for char in text:
            if char == '{': stack.append('}')
            elif char == '[': stack.append(']')
            elif char == '}':
                if stack and stack[-1] == '}': stack.pop()
            elif char == ']':
                if stack and stack[-1] == ']': stack.pop()
        return text + "".join(reversed(stack))

    # 3. 尝试修复多余的尾部字符(如案例中的 \n})
    # 逻辑:如果直接补齐不行,尝试截断到最后一个可能的闭合符再补齐
    trial_s = s
    while len(trial_s) > 0:
        fixed = balance_json(trial_s)
        try:
            return json.loads(fixed)
        except json.JSONDecodeError:
            # 删掉最后一个字符,继续尝试(处理尾部多余垃圾)
            trial_s = trial_s[:-1].rstrip()
            if not trial_s or trial_s[-1] not in ('"', '}', ']', 'e', 't', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'):
                # 优化性能:只有在可能结束的位置才尝试解析
                continue
                
    return None

def universal_cleaner(data):
    """
    递归扫描所有数据结构,自动解开所有嵌套 JSON 字符串
    """
    if isinstance(data, dict):
        return {k: universal_cleaner(v) for k, v in data.items()}
    elif isinstance(data, list):
        return [universal_cleaner(item) for item in data]
    elif isinstance(data, str):
        decoded = aggressive_json_load(data)
        if decoded is not None:
            # 递归处理"剥壳"后的内容
            return universal_cleaner(decoded)
        return data
    return data

测试

python 复制代码
raw_input = {
    "response": [
        # 情况 A: 带垃圾字符的字符串 JSON
        "{\"name\": \"cyclingSafety.checkHelmetSafety\", \"arguments\": {\"helmet_model\": \"SpeedSter Pro\"}}\n}", 
        # 情况 B: 正常的字典
        {
            "name": "cyclingSafety.checkHelmetSafety",
            "arguments": {"helmet_model": "MountainMaster X"}
        }
    ]
}

cleaned_data = universal_cleaner(raw_input)

# 打印验证结果
import pprint
pprint.pprint(cleaned_data)
相关推荐
AC赳赳老秦8 分钟前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
茉莉玫瑰花茶2 小时前
综合案例 - AI 智能租房助手 [ 5 ]
服务器·数据库·人工智能·python·ai
文艺倾年2 小时前
【强化学习】强化学习基本概念,20W字总结(一)
人工智能·python·语言模型·自然语言处理·面试·职场和发展·大模型
宸丶一2 小时前
Day 13:持久化记忆 - 让 Agent 拥有长期记忆
jvm·python·ai
码云骑士2 小时前
13-列表append的底层真相(上)-listobject源码中的预分配策略
开发语言·python
浦信仿真大讲堂3 小时前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件
xufengzhu3 小时前
第三方 Python 库 Loguru 的进阶实战
python·loguru
callJJ4 小时前
Volta + Claude Code 在 Windows 上的路径 Bug 复盘
windows·bug
极光代码工作室4 小时前
基于深度学习的手写数字识别系统
人工智能·python·深度学习·神经网络·机器学习
geovindu4 小时前
python: speech to text offline
开发语言·python·语音识别