get the first (or n'th) element in a jq json parsing
You can wrap the results from select
in an array:
jq '[.[]|select(.a=="x")][0]' your.json
Output:
{
"a": "x",
"b": false
}
jq also provides first/0
, last/0
, nth/1
so in this case the filter
( map(select(.a == "x")) | first )
, ( map(select(.a == "x")) | last )
, ( map(select(.a == "x")) | nth(1) )
produces
{
"a": "x",
"b": true
}
{
"a": "x",
"b": false
}
{
"a": "x",
"b": false
}
Additional streaming forms 'first/1', 'last/1' and 'nth/2' are also available so with this data
( first(.[] | select(.a == "x")) )
, ( last(.[] | select(.a == "x")) )
, ( nth(1; .[] | select(.a == "x")) )
produces
{
"a": "x",
"b": true
}
{
"a": "x",
"b": false
}
{
"a": "x",
"b": false
}
use map
cat raw.json|jq -r -c 'map(select(.a=="x"))|.[1]'
map
recivce a filter to filter an array.
this command
cat raw.json|jq -r -c 'map(select(.a=="x"))'
give the middle result
[{"a":"x","b":true},{"a":"x","b":false}]
.[1]
take the first element