跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAIjava

使用 json-repair 库修复大模型返回的异常 JSON 格式

大模型返回的 JSON 常因格式不规范导致解析失败,json-repair 库提供了强大的修复能力。该库能自动补全缺失值、修正语法错误、处理非拉丁字符及流式数据。支持跳过验证以提升性能,并提供严格模式进行校验。除 Python 外,Java 版本亦可用。适用于 LLM 集成开发中的数据处理环节。

CloudNative发布于 2026/3/280 浏览

简介

大模型生成的 JSON 数据往往存在格式瑕疵,比如缺少引号、逗号位置错误或键值对不完整。json-repair 库能自动识别并修复这些语法错误,确保数据可被标准解析器处理。

安装

pip install json-repair

核心用法

基础修复

最直接的用法是将损坏的字符串修复为合法的 JSON 字符串:

from json_repair import repair_json

bad_json_string = "{'name': 'Alice', 'age': 20}"
good_json_string = repair_json(bad_json_string)
# 输出:{"name": "Alice", "age": 20}
替代 json.loads

你可以直接用 repair_json.loads() 替代标准库的 json.loads(),它会在内部尝试修复后再解析:

import json_repair

decoded_object = json_repair.loads(json_string)

如果希望直接获取 Python 对象而非 JSON 字符串,可以设置 return_objects=True:

decoded_object = json_repair.repair_json(json_string, return_objects=True)
常见场景示例

1. 单引号问题 LLM 有时会生成 Python 字典风格的字符串(单引号),标准 JSON 解析器无法处理。

broken_json = "{'name': 'Alice', 'age': 20}"
result = repair_json(broken_json)
print(result) # {"name": "Alice", "age": 20}

2. 多余逗号与注释 JSON 不支持尾随逗号或注释,但修复库能智能清理。

broken_json = '[1, 2, 3, ]'
result = repair_json(broken_json)

commented_json = '{ // 这是一条注释 "id": 123 }'
result = repair_json(commented_json)

3. LLM 非结构化输出 当模型在 JSON 前后夹杂自然语言时,该库也能提取有效部分。

bad_json_string = '你好,这是我按照 json 格式返回的数据:{"name": "John", "age": 30}'
good_json_string = repair_json(bad_json_string)
data = json.loads(good_json_string)
print(data)

性能优化

默认情况下,库会先调用 json.loads() 验证输入。如果你确定输入无效且需要修复,可以通过 skip_json_loads=True 跳过验证步骤以提升速度:

good_json_string = repair_json(bad_json_string, skip_json_loads=True)

注意:只有当你百分百确定字符串不是有效 JSON 时才建议开启此选项。另外,设置 return_objects=True 通常更快,因为解析器直接返回对象,无需序列化回字符串。

字符编码处理

处理中文等非拉丁字符时,默认可能会转义为 Unicode 序列。如需保留原始字符,请传入 ensure_ascii=False:

# 默认输出:"\u7edf\u4e00\u7801"
repair_json("{'test_chinese_ascii':'统一码'}")

# 指定后输出:"统一码"
repair_json("{'test_chinese_ascii':'统一码'}", ensure_ascii=False)

严格模式

默认行为是尽力修复。若你需要校验数据合法性而非盲目修复,可启用严格模式。遇到重复键、缺失分隔符等问题时会抛出 ValueError:

from json_repair import repair_json

try:
    repair_json(bad_json_string, strict=True)
except ValueError as e:
    print(f"格式错误:{e}")

CLI 工具同样支持 --strict 参数。

流式修复

对于传输中的流式数据,可以使用 stream_stable=True 参数实现稳定修复:

stream_output = repair_json(stream_input, stream_stable=True)

CLI 使用

命令行工具方便批量处理文件:

# 查看帮助
json_repair -h

# 从文件读取并修复
json_repair input.json

# 严格模式
json_repair --strict input.json

Java 版本支持

除了 Python,Java 生态也有对应的实现,适用于后端服务集成:

Maven 依赖

<dependency>
    <groupId>io.github.du00cs</groupId>
    <artifactId>json-repairj</artifactId>
    <version>0.50.0</version>
</dependency>

代码示例

import org.jsonrepairj.JsonRepair;
import org.jsonrepairj.ParseResult;

public class Test {
    public static void main(String[] args) {
        String str = "{\"name\": \"约翰\", \"age\": 30}";
        
        // 简单修复
        String result = JsonRepair.repairJson(str);
        System.out.println(result);
        
        // 更精细的控制
        ParseResult result2 = JsonRepair.parseJson(str, true, false);
        System.out.println(result2.getJson().toString());
    }
}

目录

  1. 简介
  2. 安装
  3. 核心用法
  4. 基础修复
  5. 输出:{"name": "Alice", "age": 20}
  6. 替代 json.loads
  7. 常见场景示例
  8. 性能优化
  9. 字符编码处理
  10. 默认输出:"\u7edf\u4e00\u7801"
  11. 指定后输出:"统一码"
  12. 严格模式
  13. 流式修复
  14. CLI 使用
  15. 查看帮助
  16. 从文件读取并修复
  17. 严格模式
  18. Java 版本支持
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog

更多推荐文章

查看全部
  • C++ STL list 容器详解:使用与模拟实现
  • OpenClaw 开源 AI 智能体框架技术解析与部署实践
  • OpenClaw 部署指南:Minimax/DeepSeek 模型与飞书机器人集成
  • C++ 多态详解:从实现条件到底层原理
  • 位运算算法实战:6 道经典题目详解(字符唯一性、缺失数字等)
  • NC221681 dd 爱框框:滑动窗口算法实战
  • KingbaseES 内核级 SQL 防火墙:白名单机制与零误报实践
  • OpenClaw 汉化版部署指南:npm/Docker/脚本三种安装方式详解
  • PowerShell Invoke-WebRequest 报错 Invalid URL 和 CommandNotFound 排查指南
  • OpenClaw 部署与飞书机器人接入指南
  • C++ 哈希表封装:模拟实现 unordered_map 与 unordered_set
  • 无人机视角山区泥石流与滑坡图像识别数据集
  • 无人机航测正射影像制作:ContextCapture 与 Pix4D 实战指南
  • RTD1296PB 与 RK3568:NAS 与智能家居芯片实战对比
  • 位运算算法实战:字符唯一性、丢失数字与消失数字
  • Python 基础语法完全指南:变量、数据类型与运算符
  • 绿联云 NAS 配置 WebDAV 实现公网同步
  • JavaScript 基础语法与 jQuery 入门指南
  • 中小团队低成本搭建项目管理系统:Ubuntu 下 DooTask 私有化部署实战
  • 前端 JS 加载失败怎么办?重试与多源备份方案

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online