简介
文档:https://pypi.org/project/json-repair/
功能特性
它可以:
- 修复 JSON 中的语法错误:缺少引号、逗号位置错误、未转义字符、键值对不完整、格式错误的值(true/false/null)以及损坏的键值结构。
- 修复格式错误的 JSON 数组和对象:通过添加必要的元素或默认值(null/'')来修复不完整或损坏的结构。能够处理包含额外非 JSON 字符(如注释)的数据。
介绍 Python 库 json-repair,用于修复格式不规范的 JSON 数据,特别适用于处理大模型返回的非标准 JSON 输出。该库支持自动补全缺失值、移除注释、修复语法错误,并提供流式修复和严格模式选项。此外,还介绍了从文件读取、性能优化及 CLI 使用方法,并附带了 Java 版本的实现示例。
文档:https://pypi.org/project/json-repair/
它可以:
from json_repair import repair_json
# 将坏的 json 字符串修复为好的字符串
good_json_string = repair_json(bad_json_string)
import json_repair
# 直接解析为对象
decoded_object = json_repair.loads(json_string)
import json_repair
# True 是直接返回对象,而不是 json 字符串
decoded_object = json_repair.repair_json(json_string, return_objects=True)
import json
from json_repair import repair_json
# 1. 单引号问题
broken_json = "{'name': 'Alice', 'age': 20}"
# 2. 数组末尾多余逗号
broken_json = '[1, 2, 3, ]'
# 3. 包含注释
broken_json = ''' { // 这是一条注释 "id": 123, "desc": "test" /* 这是另一条注释 */ } '''
# 4. LLM 返回不规范
bad_json_string = '你好,这是我按照 json 格式返回的数据:{"name": "John", "age": 30, "city": "New York"'
good_json_string = repair_json(bad_json_string)
data = json.loads(good_json_string)
print(data)
不要先调用 json.loads() 再尝试修复,因为 json_repair 会自动验证 JSON 是否有效。如果仍需验证,可添加 skip_json_loads=True。
obj = {}
try:
obj = json.loads(string)
except json.JSONDecodeError:
obj = json_repair.loads(string)
import json_repair
try:
file_descriptor = open(fname, 'rb')
except OSError:
pass
with file_descriptor:
decoded_object = json_repair.load(file_descriptor)
更简洁的方式:
import json_repair
try:
decoded_object = json_repair.from_file(json_file)
except (OSError, IOError):
pass
处理中文等非拉丁字符时,需传递 ensure_ascii=False 以保留原字符。
# 默认会转义
repair_json("{'test_chinese_ascii':'统一码'}")
# 保留原字符
repair_json("{'test_chinese_ascii':'统一码'}", ensure_ascii=False)
return_objects=True 总是更快,因为解析器直接返回对象。skip_json_loads=True 仅在确定字符串不是有效 JSON 时更快。r"string with escaping\""。from json_repair import repair_json
good_json_string = repair_json(bad_json_string, skip_json_loads=True)
默认情况下,json_repair 尽力修复输入数据。如需报错而非修复,启用 strict=True。
from json_repair import repair_json
repair_json(bad_json_string, strict=True)
在严格模式下,遇到重复键、缺失分隔符等问题会抛出 ValueError。结合 skip_json_loads=True 可跳过初始检查同时执行严格规则。
传输数据时可使用 stream_stable=True 实现流式修复。
stream_output = repair_json(stream_input, stream_stable=True)
$ json_repair -h
usage: json_repair [-h] [-i] [-o TARGET] [--ensure_ascii] [--indent INDENT]
[--skip-json-loads] [--schema SCHEMA] [--schema-model MODEL]
[--strict] [filename]
positional arguments:
filename The JSON file to repair
options:
--strict Raise on duplicate keys, missing separators...
依赖:
<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 = "你好,这是我按照 json 格式返回的数据:{\"name\": \"约翰\", \"age\": 30, \"city\": \"New York\"";
// 修复 json
String result = JsonRepair.repairJson(str);
System.out.println(result);
// 更多控制
ParseResult result2 = JsonRepair.parseJson(str, true, false);
System.out.println(result2.getJson().toString());
}
}

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online