jq · lesson 27 of 32 · Variables & functions
Your own functions
def name(params): body; defines a reusable filter. A parameter written $n receives a value; a plain name receives a filter.
Examples
Example 1A reusable filter
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
def older($n): select(.age > $n); .members[] | older(30) | .name
def older($n):Define a filter calledolderwith one value parameter.select(.age > $n)Its body: reuseselect, comparing with the parameter.;Ends the definition.older(30)Call it like any built-in filter.
Result
"Ada" "Grace" "Alan"
Good to know
- Parameters without a
$are filters, not values:def twice(f): f | f;then3 | twice(. + 1)gives5.