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

Bun.JSONL.parse()

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

错误处理

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

Bun.JSONL.parseChunk()

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

返回值

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

流式处理示例

使用 read 切掉已消耗的输入并保留剩余部分:

使用 Uint8Array 的字节偏移量

当输入是 Uint8Array 时,您可以传递可选的 startend 字节偏移量:
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 的结果对象使用缓存结构以实现快速属性访问。