jqを使用してjson配列からクエリを含む配列を取得する

jqを使用してjson配列からクエリを含む配列を取得する

["a", "b", "c"]次のjsonデータとクエリで「a」が与えられた場合、jqを使用してクエリ「a」を含む配列をどのように取得できますか?

[
    ["a","b","c"],
    ["d","e","f"],
    ["g","h","i"]
]

答え1

私はこれがあなたの要件を満たしていると思います。

'.[]|select(index("a"))'

これは各サブリストに対して機能し、index("a")リストのインデックスを返します。 falseと評価されるため、含まれているサブリストのみを検索する条件として使用します。anullnullselect()a

実際の姿は次のとおりです。

$ jq '.[]|select(index("a"))' <<EOF
> [
    ["a","b","c"],
    ["d","e","f"],
    ["g","h","i"]
]
EOF
[
  "a",
  "b",
  "c"
]

答え2

最上位の配列には次のものを含めることができます。一部クエリ文字列を含むサブ配列、必要に応じて、各サブ配列にクエリ文字列を含む最上位配列であるとします。

jq 'map(select(any(index("a"))))' file

これは、少なくとも1つの(「すべての」)要素が文字列であるすべてのサブ配列を選択しますaindex()内部を解いてany()単に使用することもできますが、map(select(index("a")))言語のany()観点からIMHOを使用する方が良く見え、ほぼ同じになります。フォローアップの質問に対する私の答え

関連情報