如何使用 jq 选择具有作为输入数组超集的字符串数组字段的对象

问题描述 投票:0回答:2

一个示例是使用 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
看起来在这里可能很有用,但实际上是在子字符串上匹配。

jq
2个回答
0
投票

以下是如何测试

.field
数组
contains
数组
[1,3]

.[] | select(.field | contains([1,3]))
{
  "field": [
    1,
    2,
    3
  ]
}
{
  "field": [
    3,
    1,
    4,
    5
  ]
}

演示


0
投票

我最终使用

IN
sql like 运算符解决了这个问题。

.[] | select(.field as $field | ["1", "3"] | all(IN($field[])))

这是 jq 播放演示 - https://jqplay.org/s/wvBZhLaZfqv

期待听到是否有其他方法可以进行此过滤

© www.soinside.com 2019 - 2024. All rights reserved.