JQ:如何基于正则表达式过滤器从数组中删除对象?

时间:2016-10-04 23:00:44

标签: json regex jq

我有以下JSON数组(简化示例):

[  {
    "op": "remove",
    "path": "/cache"
  },
  {
    "op": "add",
    "path": "/game_config"
  },
  {
    "op": "remove",
    "path": "/use_replication"
  },
  {
    "op": "add",
    "path": "/copy_replication"
  }
]

我想从数组中删除包含“复制”的对象。结果将是:

[  {
    "op": "remove",
    "path": "/cache"
  },
  {
    "op": "add",
    "path": "/game_config"
  }
]

我找到了一种方法来获得它们:

 .[] | select( .path | contains("replication"))

但是我找不到从数组中删除它们的方法,保留所有其他对象。

2 个答案:

答案 0 :(得分:1)

我找到了另一种方法(我错过了接受答案中的'not'):

 .[] | (select( .path | contains("value") | not ))

答案 1 :(得分:0)

使用not可以实现否定。在您的情况下,由于您提到使用正则表达式,您可以使用test/1,如下所示:

map( select(.path | test("replication") | not))