JMESPath · lesson 4 of 15 · Projections
Projections: [*] and *
[*] is JMESPath's central idea: a projection applies everything to its right to each element and gathers the results — dropping any nulls — into a list.
Examples
Example 1Project a field from every 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[*].name
membersAn array.[*]Projection: for every element of the array….name…readname. The results are collected into a list.
Result
["Ada","Linus","Grace","Alan"]
Example 2Project over an object's values
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
office.*.*On an object,*projects over its values →["Berlin",3].
Result
["Berlin",3]
Good to know
members[*].emailreturns only two e-mails:nullresults are dropped from a projection (Linus's isnull, Grace's is missing).