主要观点:jsonptr
是一个新的沙盒化命令行工具,可格式化 JSON 并使用 JSON Pointer 查询语法。它在速度、内存使用和安全性方面优于jq
、serde_json
和simdjson
等工具。
关键信息:
jsonptr
是 C++编写的 JSON 工具,基于 Wuffs 库,Wuffs 是一种内存安全的语言。- 它能处理任意长的输入,使用多个令牌表示 JSON 字符串,在解析过程中处理 JSON Pointer 查询可显著影响性能。
jsonptr
具有速度快、内存使用少(零动态分配)、安全(在SECCOMP_MODE_STRICT
沙盒中运行)等优点。- 与
jq
相比,jsonptr
不排序对象键,需要O(1)
内存;不将 JSON 数字从字符串转换为数字,避免了StringToDouble
的冗余转换。 - Wuffs 的解码器基于缓冲区和协程,处理任意长的输入和输出,每个 JSON 字符串由多个 Wuffs 令牌表示。
jsonptr
的 C++程序通过四个例程连接字节或令牌缓冲区,实现 JSON 的处理和渲染,维护一个光标索引来跟踪解析状态。- Wuffs 还提供了更高级的 C++ API,
jsonfindptrs
示例程序使用该 API 进行更传统的 JSON 解码和处理。 simdjson
声称是最快的 JSON 解析器,但不安全,其最小化 API 需提供足够大的输出缓冲区,且没有格式化 API。jsonptr
在处理特定 JSON Pointer 查询时比simdjson
和serde_json
快很多,因为它在解析过程中应用 JSON Pointer 过滤器。
重要细节:- 在 Linux 上,
jsonptr
的main
函数会自我施加SECCOMP_MODE_STRICT
沙盒,限制程序只能从输入文件读取、计算并写入stdout
。 - Wuffs 令牌是
uint64_t
值,包含令牌长度、是否连续等信息,用于表示 JSON 数据。 jsonptr
的四个例程协同调度,通常在输入耗尽或输出满时 yield。- 不同语言的 JSON 格式化工具在性能和功能上各有特点,如 Python 的
json.tool
、Go 的encoding/json
、C++的nlohmann/json
和rapidjson
等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。