JMESPath · lesson 3 of 15 · Projections
Slices
[start:end:step] works like a Python slice: the end is exclusive, negative numbers count from the end, and every part is optional.
Examples
Example 1A range
Document
{
"team": "Platform",
"office": { "city": "Berlin", "floor": 3 },
"members": [
{ "name": "Ada", "age": 36, "role": "lead", "active": true,
"email": "[email protected]", "skills": ["rust", "sql"] },
{ "name": "Linus", "age": 28, "role": "dev", "active": true,
"email": null, "skills": ["c", "shell"] },
{ "name": "Grace", "age": 45, "role": "dev", "active": false,
"skills": ["cobol"] },
{ "name": "Alan", "age": 41, "role": "qa", "active": true,
"email": "[email protected]", "skills": [] }
]
}Query
members[1:3].name
[1:3]Elements 1 and 2 (the end is exclusive). A slice starts a projection, so the rest of the expression runs on each element..nameTheir names →["Linus","Grace"].
Result
["Linus","Grace"]
Example 2Every other element
Document
{
"team": "Platform",
"office": { "city": "Berlin", "floor": 3 },
"members": [
{ "name": "Ada", "age": 36, "role": "lead", "active": true,
"email": "[email protected]", "skills": ["rust", "sql"] },
{ "name": "Linus", "age": 28, "role": "dev", "active": true,
"email": null, "skills": ["c", "shell"] },
{ "name": "Grace", "age": 45, "role": "dev", "active": false,
"skills": ["cobol"] },
{ "name": "Alan", "age": 41, "role": "qa", "active": true,
"email": "[email protected]", "skills": [] }
]
}Query
members[::2].name[::2]Start and end left open, step 2: elements 0 and 2.
Result
["Ada","Grace"]
Good to know
members[-2:]is the last two elements.