Documentation
¶
Overview ¶
Package jsonrepair LLM 输出宽容 JSON 修复骨架:栅栏剥离 → 散文抽对象 → 语法级修复 → 标量归一。报告/领域 schema 由调用方持有;本包只做格式宽容。
Index ¶
- func CoerceString(v any) (string, bool)
- func ExtractJSON(s string) string
- func ExtractObject(s string) string
- func Normalize(raw json.RawMessage, schema *Schema) (string, error)
- func ParseLenient(raw string, v any, schema *Schema) error
- func Repair(s string) string
- func Unmarshal(text string, v any) error
- type Schema
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CoerceString ¶
CoerceString coerceString 的导出面:调用方在 Schema.OnMap 域内钩子里做 自定义归一(枚举收敛/布尔翻转等)时复用同一标量 coerce 口径,避免再造平行实现。
func ExtractJSON ¶
ExtractJSON 从模型输出中提取 JSON 文本:剥 ``` 围栏(语义单源 textutil.StripCodeFence——取第一个围栏块)、截取首个 {/[ 到末个 }/]。 快路径切片,不做语法修复——半损坏输出的宽容解析走 Unmarshal/ParseLenient; 两者围栏语义一致,宽容回退链不会静默换目标块。
func ExtractObject ¶
ExtractObject 提取文本中第一个平衡的 JSON 对象(字符串字面量感知; 未闭合则返回剩余文本由 Repair 补全括号)。无对象返回 ""。
func Normalize ¶
func Normalize(raw json.RawMessage, schema *Schema) (string, error)
Normalize 把字符串位的 bool/数字统一转成文本(宽容留给格式,拦截留给白名单)。 raw 非法 JSON 时返回 error。
func ParseLenient ¶
ParseLenient 栅栏剥离 → 直接解析 → Repair 重试 → ExtractObject+Repair 重试。 schema 为 nil 时跳过 Normalize(空 schema 下归一仍是 Unmarshal+递归+Marshal 三趟纯开销,对解析结果无贡献)。
func Repair ¶
Repair 轻量 JSON 修复:全角结构标点、非法转义(如 \| → |)、尾逗号、未闭合 括号。只处理语法级损坏;语义归一化由 Normalize / 调用方承担。
单遍字符串感知扫描(第六轮审计重构):此前尾逗号/非法转义走全文正则、不辨 字符串边界——字符串里合法的 `", }"` / `"\x"` 序列会被当损坏静默改写(修复器 的错误成功比失败更贵)。现在三类修复共用一个 inStr/esc 状态机,与 scanOpenBrackets/ExtractObject 同一纪律:字符串外才动结构位,字符串内只修 转义。