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 ))