jsongrep (jg)
jsongrep is a JSONPath-inspired query language over JSON documents.
Table of Contents
Installation
jsongrep can be installed using cargo:
The jg binary will be installed to ~/.cargo/bin.
Usage
Query an input JSON document against a jsongrep query
Usage: jg [OPTIONS] <QUERY> [FILE]
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
Query Syntax
The query engine allows you to query JSON data using a simple DSL. It supports the following operators:
- Field accesses:
"foo" - Array accesses (0-indexed):
"[0]" | "[start: end]" - Field and array wild cards:
"foo.*", "foo[*]" - Optional chaining:
"foo?.bar" - Kleene star:
"foo*" - Disjunction:
"foo | bar" - Sequence:
"foo.bar.baz"
The complete grammar for the query language can be found in the grammar directory.
Example: Pass input file by path
simple.json:
The following query will follow an arbitrary amount of filed accesses followed by a wildcard array access:
Output:
[
"fishing",
"yoga"
]
Example: Pipe input from STDIN
|
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:
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 QueryBuilder;
let query = new
.field
.index
.field
.field_wildcard
.field
.build;
Examples
Examples of using the jsongrep crate can be found in the
examples directory.
Contributing
Contributions are welcome! Please see the CONTRIBUTING.md file for more details.
License
This project is licensed under the MIT License - see the LICENSE.md file for details.