JMESPath Guide
JMESPath is a query language for JSON. It allows you to declaratively specify how to extract elements from a JSON document.
Basic Selectors
| Expression | Description |
|---|---|
foo | Selects the value for the key 'foo' |
foo.bar | Nested keys |
foo[*] | Flatten arrays |
foo[?bar > `10`] | Filtering |
foo.{name: myname} | Multi-select Hash |
Example Query
Data:
{
"people": [
{ "name": "a", "age": 20 },
{ "name": "b", "age": 30 }
]
}
Query: people[?age > `25`].name
Result: ["b"]
Advanced Selectors
| Expression | Description |
|---|---|
foo[0] | Index |
foo[-1] | Last |
foo[0:2] | Slice |
foo[::2] | Step |
foo[] | Flatten |
foo | bar | Pipe |
foo.[] | Iterate |
Filtering & Comparisons
| Expression | Description |
|---|---|
foo[?status == `active`] | Equality |
foo[?age >= `18`] | Comparison |
foo[?name != `null`] | Not equal |
foo[?contains(name, `john`)] | Contains |
foo[?status == `active` && age > `25`] | AND |
foo[?status == `active` || type == `admin`] | OR |
foo[?!(status == `inactive`)] | NOT |
Projections & Transformations
| Expression | Description |
|---|---|
foo[*].name | Projection |
foo[*].[name, age] | Multi-list |
foo[*].{name: name, years: age} | Rename |
foo[*] | [?age > `25`] | Chain |
people | sort_by(@, &age) | reverse | Sort |
Practical Examples
Example JSON
{
"products": [
{ "name": "Laptop", "price": 1200 },
{ "name": "Mouse", "price": 25 }
]
}
Example Query
products[?price > `100`].{name: name, discounted: price * `0.9`}