筛选出包含特定键/值对的子数组项

时间:2019-10-16 19:16:08

标签: json jq

我想使用jq筛选出包含特定键/值对的子数组项,而不过滤掉非数组数据。

输入:

{
  "log": {
    "foo": {
      ...
    },
    "entries": [
      {
        "request": {
          "method": "OPTIONS",
          "url": "http://www.foobar.com"
        }
      },
      {
        "request": {
          "method": "GET",
          "url": "http://www.foobar.com"
        }
      }
    ]
  }
}

所需的输出:

{
  "log": {
    "foo": {
      ...
    },
    "entries": [
      {
        "request": {
          "method": "GET",
          "url": "http://www.foobar.com"
        }
      }
    ]
  }
}

我已经尝试过了:

jq '(.log.entries[] | select(.request.method != "OPTIONS"))'

但是随后我丢失了条目上方的所有JSON数据。

2 个答案:

答案 0 :(得分:1)

使用|=赋值运算符就地修改子元素,例如:

.log.entries |= map(select(.request.method != "OPTIONS"))

答案 1 :(得分:1)

直接在符合您条件的对象上使用del()操作

del(.log.entries[] | select(.request.method == "OPTIONS"))