← Back to Insights

jsongrep: A Faster Alternative to Jq

⭐⭐⭐⭐ (4/5)
Source: Hacker News • Author: Micah Kepe
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