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: [.]}'

관련 정보