JSONPath Query Tool
Query JSON data using JSONPath expressions with recursive descent, wildcards, filters, and slicing.
Query
# From file
python3 scripts/jsonpath.py query '$.store.book[0].title' -f data.json
# From stdin
cat data.json | python3 scripts/jsonpath.py query '$.store.book[*].author'
# Recursive descent (find all 'name' fields at any depth)
cat data.json | python3 scripts/jsonpath.py query '$..name'
# Array slicing
cat data.json | python3 scripts/jsonpath.py query '$.items[0:5]'
# Filter (price < 10)
cat data.json | python3 scripts/jsonpath.py query '$.store.book[?(@.price < 10)]'
# Wildcard
cat data.json | python3 scripts/jsonpath.py query '$.store.*'
# Count matches
cat data.json | python3 scripts/jsonpath.py query '$.users[*]' --count
# First match only
cat data.json | python3 scripts/jsonpath.py query '$.items[*].id' --first
# Exit 1 if no matches (CI-friendly)
cat data.json | python3 scripts/jsonpath.py query '$.missing' --exit-empty
List Paths
# Show all available paths in JSON data
cat data.json | python3 scripts/jsonpath.py paths
# Limit depth
cat data.json | python3 scripts/jsonpath.py paths --depth 3
Extract Multiple Values
# Named extractions
cat data.json | python3 scripts/jsonpath.py extract 'name=$.user.name' 'emails=$.user.emails[*]'
Validate Expression
python3 scripts/jsonpath.py validate '$.store.book[?(@.price > 10)]'
Output Formats
python3 scripts/jsonpath.py query '$.items[*]' -f data.json --format json # default
python3 scripts/jsonpath.py query '$.items[*].id' -f data.json --format lines # one per line
python3 scripts/jsonpath.py query '$.items[*]' -f data.json --format csv # CSV for objects
JSONPath Syntax
| Expression | Description |
|---|---|
$ | Root object |
.key | Child key |
[0] | Array index |
[0:5] | Array slice (start:end) |
[0:10:2] | Array slice with step |
[*] | All elements |
..key | Recursive descent |
[?(@.price<10)] | Filter expression |
['key'] | Bracket notation |
[0,1,2] | Union (multiple indices) |