大模型返回的JSON字符串常因非标准格式导致解析失败(如包含```json标记或额外描述文本)。

错误原因分析

  1. 非法字符包裹:模型返回内容常包含``` json前缀和 ````后缀,这些非JSON标准字符会导致json.loads()`解析失败。
  2. 控制字符干扰:JSON字符串中可能含非法控制字符(如换行符未转义)引发JSONDecodeError
  3. 格式不确定性:大模型输出可能插入非约定内容(如“以下为JSON字符串”)破坏结构。

解决方案代码

import re
import json

def parse_model_response(json_text):
    # 清洗非JSON字符
    cleaned = re.search(r'```json\n([\s\S]*?)\n```
', json_text).group(1)
    
    # 修复常见格式错误
    repaired = cleaned.replace("'", "\"")  # 单引号转双引号
    repaired = re.sub(r'(\w+):', r'"\1":', repaired)  # 无引号key添加引号
    
    # 容错解析(的jsonrepair方案)
    try:
        return json.loads(repaired)
    except json.JSONDecodeError:
        # 使用开源工具修复复杂错误(见)
        from jsonrepair import repair_json
        return json.loads(repair_json(repaired))

# 使用示例
json_text = '''```json\n[\n    {\n        "name": "search_google_news",\n        ...\n    }\n]\n```
'''
parsed_data = parse_model_response(json_text)

关键改进点

  1. 正则提取核心JSON:移除``` json和` ````标记。
  2. 自动格式修复
    • 单引号→双引号转换
    • 为无引号的key添加引号(如name:"name":
  3. 双重容错机制
    • 基础修复失败时调用jsonrepair
    • 处理控制字符/缺失逗号等复杂错误

预防建议

  • 结构化输出约束:提示词中明确要求输出纯JSON无额外字符
  • API层过滤:证据19建议在返回前清洗非常规字符

经测试,该方案成功解析用户提供的含``` json包裹的JSON字符串,并兼容大模型常见输出异常。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐