渐进式 JSON 解析器 v0.1.1
渐进式构造
JSON 对象
输入还在继续,对象已经可以读取。
function parse(
chunks: AsyncIterable<string>,
host?: object,
property?: string
): Promise<JsonValue>;
npm install gradual-json 输入字符串块{{ step }} / {{ parts.length }} 块
{{ parts.slice(0, Math.max(0, step - 1)).join('') }}{{ parts[step - 1] }}
parse(chunks(), host, "data")host.data{{ complete ? '完整对象' : '正在构造' }}
{{ complete ? '输入结束 · 返回 host.data' : '输入未结束 · 可读取部分结果' }}
{{ error }}
接入示例
适配不同场景
从 HTTP、SSE 接收输入,
写入 Vue 对象,或通过 Proxy 生成命令。
{{ current.title }}
{{ current.description }}
{{ part }}接入代码完整代码 · Gist ↗
{{ current.code }}
Vue 模板
{{ current.template }}
{{ scenario === 'proxy' ? 'Proxy 的 get / set 实现' : '展开输入适配代码' }}
{{ current.adapter }}运行效果
{{ host.data?.title }}
- {{ item.name }}
{{ scenario === 'proxy' ? '实时生成的命令' : 'host.data' }}
{{ entry.op }} {{ JSON.stringify(entry.path) }} = {{ JSON.stringify(entry.value) }}
{{ scenario === 'http' ? '查看字节块与解码结果' : scenario === 'sse' ? '查看 SSE 消息与 JSON 片段' : '查看输入与对象' }}
{{ scenario === 'http' ? 'UTF-8 字节块(十六进制)' : '模拟 SSE 消息' }}
{{ wire.join(scenario === 'http' ? '\n' : '') }}送入 parse 的字符串
{{ received }}host.data
{{ statusLabel }}
{{ error }}
{{ current.note }}
测试与测量
测试与性能
验证语法、分块、Vue 代理和发布包。
相同输入与分块方式下的完整解析耗时。
1,096测试通过
0测试失败
345上游字符串测试文件
Node 24.21.0 · 覆盖 JSON 语法、分块、Vue 协同与发布包。测试范围 ↗
本机性能对比
4,096 字符块
{{ message }}
gradual-json0.1.1
jsonriver1.1.1
@streamparser/json0.0.26 · partial
{{ item.title }}{{ item.bytes ? item.bytes.toLocaleString('en-US') + ' B' : '—' }}
各库的中间更新粒度与语法语义不同;图中比较有效输入的完整解析耗时。
在当前设备的浏览器中运行。ASCII JSON,4,096 字符块,预热 3 次、轮换顺序测量 11 次,取中位数。计时前核对完整结果;不含库加载、网络等待、输入解码或 Vue 更新。本机测量时间:{{ measuredAt }}。