Bun.JSONL.parse()
解析完整的 JSONL 输入并返回所有解析值的数组。
Uint8Array:
Uint8Array 时,缓冲区开头的 UTF-8 BOM 会被自动跳过。
错误处理
如果输入包含无效 JSON,Bun.JSONL.parse() 会抛出 SyntaxError:
Bun.JSONL.parseChunk()
对于流式场景,parseChunk 尽可能从输入中解析完整值并报告解析进度。当数据逐步接收(例如网络流)时,知道从何处继续解析很有用。
返回值
parseChunk 返回一个包含四个属性的对象:
| 属性 | 类型 | 说明 |
|---|---|---|
values | any[] | 成功解析的 JSON 值数组 |
read | number | 消耗的字节数(Uint8Array)或字符数(字符串) |
done | boolean | 如果整个输入被完全消费且无剩余数据,值为 true |
error | SyntaxError | null | 解析错误,若无错误则为 null |
流式示例
使用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返回的结果对象使用缓存结构,提高属性访问速度。