次のようなデータがあるとしましょう。
{
"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