JQ:如何根据正则表达式过滤器从数组中删除对象?
JQ: how to delete object from array based on regex filter?
我有以下 JSON 数组(简化示例):
[ {
"op": "remove",
"path": "/cache"
},
{
"op": "add",
"path": "/game_config"
},
{
"op": "remove",
"path": "/use_replication"
},
{
"op": "add",
"path": "/copy_replication"
}
]
我想从数组中删除包含 "replication" 的对象。结果将是:
[ {
"op": "remove",
"path": "/cache"
},
{
"op": "add",
"path": "/game_config"
}
]
我找到了一种只获取它们的方法:
.[] | select( .path | contains("replication"))
但是我找不到从数组中仅删除它们而保留所有其他对象的方法。
否定可以使用not
来实现。在你的情况下,因为你提到使用正则表达式,你可以使用 test/1
如下:
map( select(.path | test("replication") | not))
我找到了另一种方法(我在已接受的答案中遗漏了 'not'):
.[] | (select( .path | contains("value") | not ))
我有以下 JSON 数组(简化示例):
[ {
"op": "remove",
"path": "/cache"
},
{
"op": "add",
"path": "/game_config"
},
{
"op": "remove",
"path": "/use_replication"
},
{
"op": "add",
"path": "/copy_replication"
}
]
我想从数组中删除包含 "replication" 的对象。结果将是:
[ {
"op": "remove",
"path": "/cache"
},
{
"op": "add",
"path": "/game_config"
}
]
我找到了一种只获取它们的方法:
.[] | select( .path | contains("replication"))
但是我找不到从数组中仅删除它们而保留所有其他对象的方法。
否定可以使用not
来实现。在你的情况下,因为你提到使用正则表达式,你可以使用 test/1
如下:
map( select(.path | test("replication") | not))
我找到了另一种方法(我在已接受的答案中遗漏了 'not'):
.[] | (select( .path | contains("value") | not ))