Skip to main content
Bun 内置支持解析 JSONL(换行分隔的 JSON),其中每一行都是一个独立的 JSON 值。解析器使用 JavaScriptCore 的优化 JSON 解析器以 C++ 实现,并支持流式处理。

Bun.JSONL.parse()

解析完整的 JSONL 输入并返回所有解析值的数组。
输入可以是字符串或 Uint8Array
对于 Uint8Array 输入,Bun 会跳过缓冲区开头的 UTF-8 BOM。

错误处理

如果输入包含无效 JSON 且没有成功解析任何值,Bun.JSONL.parse() 会抛出 SyntaxError。如果在发生错误前至少解析出了一个值,则会返回已解析的值,而不会抛出错误。

Bun.JSONL.parseChunk()

对于流式处理,parseChunk 会从输入中解析尽可能多的完整值,并报告解析到的位置,这样当数据以增量方式到达时(例如来自网络流),你就知道应从哪里继续解析。

返回值

parseChunk 返回一个包含四个属性的对象:

流式示例

使用 read 截取已消耗输入,剩余部分继续传递:

使用 Uint8Array 的字节偏移

当输入为 Uint8Array 时,可以传入可选的起始和结束字节偏移:
read 值始终是原始缓冲区中的字节偏移量。将它与 TypedArray.subarray() 结合使用,可以实现零拷贝流式处理:

错误恢复

parse() 不同,parseChunk() 遇到无效 JSON 不抛出异常,而是通过返回的 error 属性提供错误信息,同时返回错误前成功解析的所有值:

支持的值类型

每一行可以是任意有效的 JSON 值,而不仅限于对象:

性能说明

  • ASCII 快速通道:纯 ASCII 输入直接解析,无需复制,使用零分配的 StringView
  • UTF-8 支持:非 ASCII 的 Uint8Array 输入通过 SIMD 加速转换为 UTF-16。
  • BOM 处理Uint8Array 开头的 UTF-8 BOM(0xEF 0xBB 0xBF)自动跳过。
  • 预构建对象形状parseChunk 返回的结果对象使用缓存结构,提高属性访问速度。