1. ホーム
  2. json

jq の json パースで最初の (または n 番目の) 要素を取得する

2023-10-21 01:56:03

質問

jsonの[]内の1番目の要素を取得することができます。

$ echo '[{"a":"x", "b":true}, {"a":"XML", "b":false}]' | jq '.[1]'
{
  "a": "XML",
  "b": false
}

しかし、jsonがすでに分解されている場合(たとえば、'select'を使ってエントリーをフィルタリングした後)、どうすれば単一のエントリーを選択し、ここで見られるエラーを回避できるのでしょうか?

$ 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
}