修复代码
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)