一个示例是使用 jq 返回“field”属性中同时具有“1”和“3”的对象。
对象:
[
{
"field": ["1", "2", "3"]
},
{
"field": ["1", "2", "34"]
},
{
"field": ["3", "1", "4", "5"]
}
]
返回:
{
"field": ["1", "2", "3"]
},
{
"field": ["3", "1", "4", "5"]
}
我发现了许多从数组中选择至少包含一个值的对象的示例(例如,返回“field”属性包含“1”或“2”的对象),但我没有找到任何匹配所有对象的示例价值观。乍一看,jq 中的一些函数,例如
contains
看起来在这里可能很有用,但实际上是在子字符串上匹配。
以下是如何测试
.field
数组 contains
数组 [1,3]
。
.[] | select(.field | contains([1,3]))
{
"field": [
1,
2,
3
]
}
{
"field": [
3,
1,
4,
5
]
}
我最终使用
IN
sql like 运算符解决了这个问题。
.[] | select(.field as $field | ["1", "3"] | all(IN($field[])))
这是 jq 播放演示 - https://jqplay.org/s/wvBZhLaZfqv
期待听到是否有其他方法可以进行此过滤