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

ExpressionDescription
fooSelects the value for the key 'foo'
foo.barNested 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

ExpressionDescription
foo[0]Index
foo[-1]Last
foo[0:2]Slice
foo[::2]Step
foo[]Flatten
foo | barPipe
foo.[]Iterate

Filtering & Comparisons

ExpressionDescription
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

ExpressionDescription
foo[*].nameProjection
foo[*].[name, age]Multi-list
foo[*].{name: name, years: age}Rename
foo[*] | [?age > `25`]Chain
people | sort_by(@, &age) | reverseSort

Practical Examples

Example JSON

      {
    "products": [
      { "name": "Laptop", "price": 1200 },
      { "name": "Mouse", "price": 25 }
    ]
  }
    

Example Query

      products[?price > `100`].{name: name, discounted: price * `0.9`}