gradual-json
0运行时依赖
8.1 kBnpm 压缩包 · v0.1.1
浏览器 / Node.js同一份 ESM 实现
MIT开放源码许可 ↗

渐进式 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' : '输入未结束 · 可读取部分结果' }}

接入示例

适配不同场景

从 HTTP、SSE 接收输入,
写入 Vue 对象,或通过 Proxy 生成命令。

{{ current.title }}

{{ current.description }}

{{ current.code }}
{{ scenario === 'proxy' ? 'Proxy 的 get / set 实现' : '展开输入适配代码' }}
{{ current.adapter }}
运行效果

{{ host.data?.title }}

  • {{ item.name }}

{{ scenario === 'proxy' ? '实时生成的命令' : 'host.data' }}

  1. {{ entry.op }} {{ JSON.stringify(entry.path) }} = {{ JSON.stringify(entry.value) }}
{{ scenario === 'http' ? '查看字节块与解码结果' : scenario === 'sse' ? '查看 SSE 消息与 JSON 片段' : '查看输入与对象' }}

送入 parse 的字符串

{{ received }}
{{ statusLabel }}

{{ 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' : '—' }}

{{ method.label }}{{ item.medianMs ? item.medianMs[method.id].toFixed(3) + ' ms' : '—' }}

各库的中间更新粒度与语法语义不同;图中比较有效输入的完整解析耗时。

在当前设备的浏览器中运行。ASCII JSON,4,096 字符块,预热 3 次、轮换顺序测量 11 次,取中位数。计时前核对完整结果;不含库加载、网络等待、输入解码或 Vue 更新。本机测量时间:{{ measuredAt }}。

测量代码 ↗