在子级别使用jq进行数组过滤

时间:2018-11-01 15:13:50

标签: json jq

我看到的所有演示/示例都在 first 级别进行过滤,但是我想在jem进行第二级过滤:

{
  "TheArray": [
    {
      "F1": "V11",
      "F2": "V12",
      "F3": "V13"
    },      
    {       
      "F1": "V21",
      "F2": "V22",
      "F3": "V33"
    }  ]
}

我想用"F1" == "V11"进行过滤,并得到:

{
  "TheArray": [
    {
      "F1": "V11",
      "F2": "V12",
      "F3": "V13"
    }  ]
}

jq有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用以下jq过滤器:

jq '.TheArray |= map(select(.F1=="V11"))' file

select命令选择正确的元素,map正在基于所选元素构建数组。

答案 1 :(得分:1)

如果您想要一个可以简单地“编辑”原始文档,并保留顶级对象可能具有的其他键的解决方案,则下面的方法比较合适:

.TheArray |= map(select(.F1=="V11"))

变化

with_entries( .value |= map(select(.F1 == "V11")))

另一个:

del(.TheArray[] | select(.F1!="V11"))

如果您使用的jq版本比1.5版新:

.TheArray[] |= select(.F1=="V11")