jq · lesson 4 of 32 · Getting started
Iterate & collect
.[] turns an array into a stream of its elements — one output each. Wrap any filter in [ … ] to collect a stream back into a single array.
Examples
Example 1Stream every member's name
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
.membersThe array of members.[]Iterate: emit each element as its own output instead of the array..nameReadnamefrom every element — four separate results.
Result
"Ada" "Linus" "Grace" "Alan"
Example 2Collect a stream into one array
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[].age]
[Square brackets around a filter collect everything it outputs….members[].age…here, every member's age…]…into one array — a single result.
Result
[36,28,45,41]
Good to know
.[]also iterates over the values of an object:.office[]gives"Berlin"then3.