@cacheplane/json-流
递增的 JSON 分析一次到达一个块的输入 .
当AI模型、网络流、工人或工具调用JSON时使用它
渐渐地. JSON.parse() 需要一个完整的文档; 此解析器会给您一个
文档到达时键入树, 标记每个节点 partial 或者说
complete 这样你就能把落地的东西 留下剩下的东西.
安装
npm install @cacheplane/json-stream
运行时间和包装 :
- 节点
>=20 - 包含类型脚本声明
- 无害环境管理和CJS捆绑在一起
- 零运行时间依赖关系
- 标出无副作用
30- 第二实例
import { create, push, finish, isObjectNode } from "@cacheplane/json-stream";
let state = create();
for (const chunk of ['{"name": "Ada', '", "age": 3', "6}"]) {
state = push(state, chunk);
}
state = finish(state);
if (isObjectNode(state.root)) {
// Every node carries a status, so a half-arrived string is still readable.
console.log(state.root.status); // "complete"
}
心理模式
3个函数驱动整个解析器, 每个函数返回一个新的 StreamState
而不是改变你通过的那个:
create()- 一个新鲜而空的状态.push(state, chunk)——喂下个块;安全到任何字节边界, 包括中键和中键逃逸顺序.finish(state)——输入信号端. 任何尚未解决的问题都会解决 报告为StreamError。 。 。 .
树上的每个节点都带有 status 联 合 国 partial 或者说 complete这是
整个库的区别: 消费者可以制造字符串
并且知道不要把它当作最终决定.
结构错误
已解析对象值保留 JSON 密钥为可自控、可写入、,
普通对象上的可配置数据属性,包括空键和
诸如 __proto__, (中文(简体) ), constructor,以及 toString复制密钥
最后一个值,匹配 JSON.parse定义 JSON 密钥并不改变
结果对象的原型.
当分析失败时, state.error 包含一个 StreamError 与源位置,
人能读取 message和马厩 code b. 从公众那里
StreamErrorCode 工会:
type StreamErrorCode =
| "INVALID_SYNTAX"
| "UNEXPECTED_END"
| "TRAILING_CONTENT";
INVALID_SYNTAX表示一个符号或JSON语法规则有误,包括: 无法解析的已完成原始 .UNEXPECTED_END表示finish()找到在值或值时结束的输入 容器仍然是一个渐进有效的前缀。 包括号码 前缀,例如-, (中文(简体) ),1.,以及1e+,可以在更多情况下生效 输入.TRAILING_CONTENT表示在根 JSON 后到达的更多非空白输入 数值已经完成.
使用 code 用于控制流动。 信息仍然对人们和诊断有帮助,
但它们的确切措词不是控制流动合同的一部分。 错误状态
是终端: 稍后 push() 财务报告和审定财务报表 finish() 调用保留相同的结构
错误状态 .
类型警卫
缩小每个节点类型的帮助, 外加状态检查 :
import {
isArrayNode,
isBoolNode,
isComplete,
isNullNode,
isNumberNode,
isObjectNode,
isStringNode,
} from "@cacheplane/json-stream";
isComplete(node) 当决定一个值是否为
安全下游承诺.
JSON 指针查询
resolve 从树上读出一个节点 RFC 6901 (英语) 指针,即
当您关心大流文件的一个字段时, 方便:
import { resolve } from "@cacheplane/json-stream";
const node = resolve(state.root, "/choices/0/message/content");
它回来了 undefined 当路径尚不存在时——一个正常条件
中流,不是错.
相关
@cacheplane/partial-json更丰富的部分JSON解析器 与保存身份和结构共享相结合.@cacheplane/partial-markdown- 同样的想法 流出马克下.
许可证
麻省理工学院