extractJson(JSON 提取) 结构化输出

别名: JSON 提取

从任意包裹文本里提取 JSON 的两级策略:围栏优先(找 ` ```json ` 代码块)+ 字符串感知的括号平衡扫描兜底,依次尝试 `JSON.parse`,第一个解析成功的就赢。常见实现漏掉字符串转义(`\"`、`\\`)会切错边界。

它是什么

extractJson(JSON 提取)从任意包裹文本里捞出 JSON:围栏优先(文本里有 ```json 代码块时直接取围栏内容)+ **字符串感知的括号平衡扫描兜底**(没有围栏时从头扫描,找第一段「花括号配对完整、且能通过 JSON.parse」的片段),依次尝试 JSON.parse,第一个解析成功的就赢。第 05 章的三种输出形态——裸 JSON、包在代码块里、裹在散文里——过一遍 extractJson 结果完全一致。

关键实现细节

扫描器必须感知字符串:记录当前在不在字符串里,字符串内的 { / } / " 只是普通字符;\"\\ 转义要连跳——漏掉这行,遇到 JSON 里含 \"\\ 就切错边界(本章练习重点考察的一类边界)。候选片段从前往后依次 JSON.parse,散文里先出现的伪 JSON(如 {x: 1})解析失败会自动跳过。

与 JSON.parse 的关系

extractJson 建立在原生 JSON.parse 之上,解决的是「parse 之前先找到 JSON 在哪」,合法性判定仍交给 JSON.parse。它是流水线第一工位:提取出来的 unknown 还要交给校验层(validation)确认形状符合契约,才能成为可信数据(structured-output 词条)。

相关词条