JMESPath · lesson 11 of 15 · Reshaping
Multiselect hash
{key: expression, …} builds an object, so you can rename, pick and combine values.
Examples
Example 1Rename fields
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[*].{who: name, years: age}{who: name, years: age}Build an object for each member: the keywhogets the name andyearsgets the age.
Result
[
{"who":"Ada","years":36},
{"who":"Linus","years":28},
{"who":"Grace","years":45},
{"who":"Alan","years":41}
]Example 2A summary object
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
{team: team, count: length(members), oldest: max_by(members, &age).name}team: teamCopy a value under a key.count: length(members)A computed value.oldest: max_by(members, &age).nameFunctions and paths combine freely.
Result
{"count":4,"oldest":"Grace","team":"Platform"}Good to know
- Objects come back with their keys in alphabetical order, not the order you wrote them.