jq · lesson 6 of 32 · Pipes & building output
Building objects
{ … } builds a new object. {name} is shorthand for {name: .name}, and a value can be any expression — wrap computed ones in parentheses.
Examples
Example 1Reshape each member
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, next_age: (.age + 1)}
{nameShorthand: copy the keynameand its value from the input (same asname: .name).next_ageA brand-new key…(.age + 1)…whose value is any expression, run against each member. The parentheses group it.
Result
{"name":"Ada","next_age":37}
{"name":"Linus","next_age":29}
{"name":"Grace","next_age":46}
{"name":"Alan","next_age":42}Example 2Use a value as a key
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 | map({(.name): .age}) | add
map(Run the filter inside on every element and collect the results in an array.{(.name): .age}A computed key: the parentheses make.namean expression, so each member becomes a one-key object.| addMerge the array of small objects into one lookup table.
Result
{"Ada":36,"Linus":28,"Grace":45,"Alan":41}