首页 > 解决方案 > 过滤掉包含特定键/值对的子数组项

问题描述

我想使用 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 数据。

标签: jsonjq

解决方案


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

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

推荐阅读