JQ:How 要从 json 数组中删除带有条件的项目?

JQ:How to remove items from json array with conditions?

我有以下几个 json 数组对象,我想使用单个 jq 命令进行过滤。

{
    "Sid": "bla1",
    "Effect": "Allow",
    "Principal": {
      "AWS": "*"
    },
    "Action": "blabla",
    "Resource": "blablablabla",
    "Condition": {
      "ArnLike": {
        "aws:bla": [
          "blablablablablabla*",
          "blablablablabla*",
          "blablablabla:*"
        ]
      }
    }
  }

如果“Sid”==“bla1”,我如何从“Condition->ArnLike->aws:bla”中删除项目“blablablablablabla:*”

预期结果如下

{
    "Sid": "bla1",
    "Effect": "Allow",
    "Principal": {
      "AWS": "*"
    },
    "Action": "blabla",
    "Resource": "blablablabla",
    "Condition": {
      "ArnLike": {
        "aws:bla": [
          "blablablablabla*",
          "blablablabla:*"
        ]
      }
    }
  }

此致

首先,select 匹配条件 .Sid == "bla1" 的项目,然后 del从中提取任何匹配 . == "blablablablablabla*" 的条目 .Condition.ArnLike."aws:bla"[]

jq 'select(.Sid == "bla1") |=
  del(.Condition.ArnLike."aws:bla"[] | select(. == "blablablablablabla*"))
'

Demo

如果您的对象在数组中,请使用 map 将此应用到该数组。

jq 'map(select(.Sid == "bla1") |=
  del(.Condition.ArnLike."aws:bla"[] | select(. == "blablablablablabla*"))
)'

Demo