Json内の最初の要素を取得できます[]
$ echo '[{"a":"x", "b":true}, {"a":"XML", "b":false}]' | jq '.[1]'
{
"a": "XML",
"b": false
}
ただし、jsonが既に逆アセンブルされている場合(たとえば、「選択」を使用してエントリをフィルタリングした後)、1つのエントリを選択して、ここに表示されるエラーを回避するにはどうすればよいですか?
$ echo '[{"a":"x", "b":true}, {"a":"x", "b":false},{"a":"XML", "b":false}]' | jq '.[] | select( .a == "x")'
{
"a": "x",
"b": true
}
{
"a": "x",
"b": false
}
$ echo '[{"a":"x", "b":true}, {"a":"x", "b":false},{"a":"XML", "b":false}]' | jq '.[] | select( .a == "x") | .[1]'
jq: error (at <stdin>:1): Cannot index object with number
select
の結果を配列にラップできます。
jq '[.[]|select(.a=="x")][0]' your.json
出力:
{
"a": "x",
"b": false
}
jqは first/0
、 last/0
、 nth/1
したがって、この場合はフィルター
( map(select(.a == "x")) | first )
, ( map(select(.a == "x")) | last )
, ( map(select(.a == "x")) | nth(1) )
生産する
{
"a": "x",
"b": true
}
{
"a": "x",
"b": false
}
{
"a": "x",
"b": false
}
追加のストリーミング形式 'first/1' 、 'last/1' および 'nth/2' も利用できるため、このデータで
( first(.[] | select(.a == "x")) )
, ( last(.[] | select(.a == "x")) )
, ( nth(1; .[] | select(.a == "x")) )
生産する
{
"a": "x",
"b": true
}
{
"a": "x",
"b": false
}
{
"a": "x",
"b": false
}
map
を使用します
cat raw.json|jq -r -c 'map(select(.a=="x"))|.[1]'
map
filterを受け取り、配列をフィルタリングします。
このコマンド
cat raw.json|jq -r -c 'map(select(.a=="x"))'
中間結果を与える
[{"a":"x","b":true},{"a":"x","b":false}]
.[1]
最初の要素を取る