假设我有这样的数据:
{
"18" : [ 2, 3, 3 ],
"28" : [ 2, 2, 7 ],
"45" : [ 3, 3, 5 ]
}
我想进行一个jq
查询,返回对象的一个/多个键以及包含给定值的数组。例如,2存在于键“18”和“28”中,而7仅存在于“28”中。这是我有兴趣查找的父对象的名称。我已经阅读了手册,但似乎找不到类似的示例。
答案1
仅使用map_values
给定 valueselect
的数组,然后提取这些数组的键: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
我使用--argjson
而不是--arg
将值 2 传递到表达式中,因为$val
数据是数字而不是字符串。