jsongrep: A Faster Alternative to Jq
Rust
JSON
Performance
Tools
DFA
核心创新
jsongrep 将 JSON 查询编译为 DFA(确定性有限自动机),实现单次遍历树结构,O(1) 状态转换。这是与 jq/jmespath/jsonpath-rust 的根本区别——那些工具是解释型,而 jsongrep 是编译型。
技术亮点
- DFA 编译:查询语言是正则语言,正则表达式匹配树边(键和索引)而非字符
- Glushkov's Algorithm:构建 epsilon-free NFA,避免 epsilon 转换
- 零拷贝解析:使用 serde_json_borrow
- 端到端性能:比 jq 快一个数量级
- 查询示例:
jg 'roommates[*].name'匹配路径
查询语法
$ cat sample.json | jg '(* | [*])*.name'
.字段选择*单个通配符[*]数组通配符|或运算*Kleene 星号
为什么 DFA 这么快
查询在编译时付费一次,然后搜索本质上是免费的。自动机一次处理输入符号,不需要回溯、递归栈或指数级膨胀。这与 ripgrep 的原理相同——但应用于树结构而非字符串。
安装
cargo install jsongrep