jq 値を含む配列の親オブジェクトキー

jq 値を含む配列の親オブジェクトキー

次のようなデータがあるとしましょう。

{
  "18" : [ 2, 3, 3 ],
  "28" : [ 2, 2, 7 ],
  "45" : [ 3, 3, 5 ]
}

jqオブジェクトのキー/キーと与えられた値を含む配列を返すクエリを作成したいと思います。たとえば、2はキー「18」と「28」に存在し、7は「28」にのみ存在します。これは私が探している親オブジェクトの名前です。ドキュメントを読みましたが、同様の例が見つからないようです。

答え1

map_values与えられた値の配列のみを使用しselect、次の配列のキーを抽出します。contain$val

jq -r --argjson val 2 'map_values(select(contains([$val]))) | keys[]' file

contains()返品本物与えられた配列([$val])が関数の入力に完全に含まれている場合。contains()帰ってきたら本物入力に配列がある場合、select()その配列が返されます。

map_values()入力オブジェクトのキーに関連する配列を選択するためにこれを使用しています。これにより、渡された選択項目の配列を含む削除されたオブジェクトが提供され、結果がkeys私に渡されます。次に、キー配列を提供し、それを緩い文字列のセットに解き、最後に[]

与えられた入力データの値が 2 の場合、$val次の値を返します。

18
28

データは文字列ではなく数値なので、値2を式に渡す--argjson代わりに使用しています。--arg$val

関連情報