如何用jq筛选字符串数组字段为输入数组超集的对象
使用jq筛选数组字段包含所有指定值的对象
需求说明
需要从JSON数组中筛选出field属性**同时精确包含"value-1"和"value-2"**的对象,排除仅包含其中一个值的情况。之前找到的示例大多是筛选包含至少一个指定值的对象,而jq的contains函数是子字符串匹配,无法满足精确匹配需求。
原始JSON数据
[ { "field": ["value-1", "value-2", "value-3"] }, { "field": ["value-1", "value-34"] }, { "field": ["value-3", "value-1", "value-4", "value-5"] } ]
解决方案:jq命令
使用all结合IN实现精确匹配所有指定值:
jq '.[] | select(["value-1", "value-2"] | all(. as $v; $v | IN(.field[])))'
命令解释
.[]:遍历输入数组中的每一个对象select(...):仅保留满足括号内条件的对象["value-1", "value-2"] | all(...):验证指定的所有值都符合后续匹配规则. as $v; $v | IN(.field[]):将当前指定值存入变量$v,检查$v是否是.field数组中的精确元素(IN会做严格的相等匹配)
正确返回结果
{ "field": ["value-1", "value-2", "value-3"] }
注:你提供的示例返回结果中第三个对象并不包含"value-2",不符合筛选条件,因此正确结果仅包含第一个对象。
内容的提问来源于stack exchange,提问作者FiveOFive
相关产品推荐
相关产品推荐

