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*"))
'
如果您的对象在数组中,请使用 map
将此应用到该数组。
jq 'map(select(.Sid == "bla1") |=
del(.Condition.ArnLike."aws:bla"[] | select(. == "blablablablablabla*"))
)'
我有以下几个 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*"))
'
如果您的对象在数组中,请使用 map
将此应用到该数组。
jq 'map(select(.Sid == "bla1") |=
del(.Condition.ArnLike."aws:bla"[] | select(. == "blablablablablabla*"))
)'