包含 jq 值的数组的父对象键

包含 jq 值的数组的父对象键

假设我有这样的数据:

{
  "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数据是数字而不是字符串。

相关内容