Skip to content

引入

ts
import { safeJsonParse, parseLooseJson } from 't-comm';

// 不支持 tree-shaking 的项目
import { safeJsonParse, parseLooseJson} from 't-comm/lib/json/index';

// 只支持 ESM 的项目
import { safeJsonParse, parseLooseJson} from 't-comm/es/json/index';

safeJsonParse(data, defaultValue)

描述:加了 try-catch 的 JSON.parse

参数

参数名描述
data传入数据
defaultValue默认值,不传则为 空对象

返回: 解析后的数据

示例

ts
safeJsonParse(data)

safeJsonParse(data, {})

safeJsonParse(data, [])

parseLooseJson(content, logTag)

描述:通用 LLM 输出 JSON 容错解析 用于解析大语言模型(AI Agent)输出的 JSON:通常 LLM 输出的内容有以下几种 "脏" 情况:

    - 直接就是合法 JSON - JSON 被自然语言包围("好的,下面是 JSON: { ... } 谢谢") - JSON 被 markdown 代码块包裹(`json { ... } `) - 因 token 上限被截断(缺少闭合的 ] 和 })
本函数依次使用 5 层策略尽力解析: 策略 1: 直接 JSON.parse 策略 2: 提取第一个 `{` 到最后一个 `}` 之间的内容 策略 3: 贪婪匹配最外层 markdown 代码块 策略 4: 按括号平衡从第一个 `{` 开始匹配(应对尾部自然语言夹带) 策略 5: token 截断时尝试补齐闭合符号("、]、})

参数

参数名描述
contentLLM 返回的原始字符串
logTag策略 5 触发时的日志前缀(默认 [AI]),便于上层区分调用方

示例

ts
const result = parseLooseJson<{ name: string }>(aiResponseText);
if (result) console.log(result.name);