如何过滤 json 数组的内容,但保留父级为 jq?

如何过滤 json 数组的内容,但保留父级为 jq?

我有一些如下所示的 JSON:

{
  "Vpcs": [
    {
      "VpcId": "vpc-1",
      "OwnerId": "abc"
    },
    {
      "VpcId": "vpc-2",
      "OwnerId": "def"
    }
  ]
}

我只想要 的元素OwnerId!=abc,但我想保持 Vpcs 父数组完整。

如果我这样做echo $JSON|jq -r '.Vpcs[]|select(.OwnerId!="abc"),我会得到这个:

{
  "VpcId": "vpc-2",
  "OwnerId": "def"
}

这接近我想要的,但它没有父数组。所以,我想也许我应该将父数组放在 select 语句中,如下所示:

echo $JSON |jq -r '.|select(.Vpcs[].OwnerId!="abc")'

但这似乎并没有过滤我想要的数据:

{
  "Vpcs": [
    {
      "VpcId": "vpc-1",
      "OwnerId": "abc"
    },
    {
      "VpcId": "vpc-2",
      "OwnerId": "def"
    }
  ]
}

我怎样才能得到像这样的结果:

{
  "Vpcs": [
    {
      "VpcId": "vpc-2",
      "OwnerId": "def"
    }
  ]
}

答案1

如果“重建”你的结构是一个选择,你可以这样做

jq '.Vpcs[]|select(.OwnerId!="abc")|{Vpcs: [.]}'

相关内容