| Crates.io | jsongrep |
| lib.rs | jsongrep |
| version | 0.3.0 |
| created_at | 2025-08-10 01:20:10.308373+00 |
| updated_at | 2025-11-21 23:43:19.400372+00 |
| description | A JSONPath-inspired query language for JSON documents |
| homepage | https://github.com/micahkepe/jsongrep |
| repository | https://github.com/micahkepe/jsongrep |
| max_upload_size | |
| id | 1788357 |
| size | 168,721 |
jsongrep is a JSONPath-inspired query language over JSON documents.
jsongrep can be installed using cargo:
cargo install jsongrep
The jg binary will be installed to ~/.cargo/bin.
A JSONPath-inspired query language for JSON documents
Usage: jg [OPTIONS] [QUERY] [FILE] [COMMAND]
Commands:
generate Generate additional documentation and/or completions
Arguments:
[QUERY] Query string (e.g., "**.name")
[FILE] Optional path to JSON file. If omitted, reads from STDIN
Options:
--compact Do not pretty-print the JSON output, instead use compact
--count Display count of number of matches
--depth Display depth of the input document
-n, --no-display Do not display matched JSON values
-h, --help Print help
-V, --version Print version
The query engine allows you to query JSON data using a simple DSL. It supports the following operators:
foo[0] | [start: end]foo.*, foo[*]foo?.barfoo*foo | barfoo.bar.bazNotes:
Sequences use . to chain steps: foo.bar.baz
Fields can be unquoted (foo) or quoted ("foo bar")
The * modifier after a step is different from the * field wildcard — the
modifier repeats the preceding step.
The complete grammar for the query language can be found in the grammar directory.
Example: Pass input file by path
simple.json:
{
"name": {
"first": "John",
"last": "Doe"
},
"age": 32,
"hobbies": ["fishing", "yoga"]
}
The following query will follow an arbitrary amount of filed accesses followed by a wildcard array access:
jg "**.[*]" simple.json
Output:
[
"fishing",
"yoga"
]
Example: Pipe input from STDIN
curl https://api.nobelprize.org/v1/prize.json | jg "prizes[4].laureates[1].motivation"
Output:
[
"\"for foundational discoveries and inventions that enable machine learning with artificial neural networks\""
]
Example: Check number of matches without displaying them
Again, using the simple.json file:
jg "**.[*]" simple.json --count --no-display
Output:
Found matches: 2
The jsongrep::query::ast module defines the QueryBuilder fluent API for
building queries. It allows you to construct queries using a builder pattern.
Example Usage:
// Construct the query "foo[0].bar.*.baz"
use jsongrep::query::engine::QueryBuilder;
let query = QueryBuilder::new()
.field("foo")
.index(0)
.field("bar")
.field_wildcard()
.field("baz")
.build();
Examples of using the jsongrep crate can be found in the
examples directory.
To generate completions for your shell, you can use the jg generate shell
subcommand. By default, the completions will be printed to /dev/stdout and can
be redirected to your shell's expected completion location:
Bash
# Source the completion script in your .bashrc
echo 'source /path/to/jg.bash' >> ~/.bashrc
# Or copy to the system-wide bash completion directory
jg generate shell bash > jg.bash && sudo mv jg.bash /etc/bash_completion.d/
Zsh
mkdir -p ~/.zsh/completions
jg generate shell zsh > ~/.zsh/completions/_jg
# Add the directory to fpath in your .zshrc before compinit
echo 'fpath=(~/.zsh/completions $fpath)' >> ~/.zshrc
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
Fish
jg generate shell fish > ~/.config/fish/completions/jg.fish
To generate a Man page for jg, you can use the jg generate man subcommand to
generate to a specified output directory with the -o/--output-dir options
(defaults to current directory):
mkdir -p ~/.local/share/man/man1/
jg generate man -o ~/.local/share/man/man1/
Browse the generated Man pages with man jg.
Contributions are welcome! Please see the CONTRIBUTING.md file for more details.
This project is licensed under the MIT License - see the LICENSE.md file for details.