JMESPath · lesson 13 of 15 · Functions
Sorting & picking
sort_by, min_by and max_by take an expression reference: &age means "evaluate age on each element" rather than evaluating it right now.
Examples
Example 1Sort by a field
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
sort_by(members, &age)[*].name
sort_by(Sort an array by a key…members…this array…&age…the key, as a reference:&postponesageso it is evaluated on every element.[*].nameThen project the names, youngest first.
Result
["Linus","Ada","Alan","Grace"]
Example 2The element with the largest value
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
max_by(members, &age).name
max_by(members, &age)The member with the largestage— the whole object..nameRead its name →"Grace".
Result
"Grace"
Good to know
sort(list)sorts plain values andreverse(list)flips a list:reverse(sort_by(members, &age))[*].namesorts oldest first.min_byis the counterpart ofmax_by.