在保留w / jq的同时过滤JSON内部的数组

时间:2018-12-19 16:54:12

标签: arrays json bash edit jq

如下所示的JSON数据,我想在不更改结构的情况下丢弃“ bar” =“ cccc”时。

{
      "foofoo": {
        "barbar": [
          {
            "foo": "0000",
            "bar": "aaaa"
          },
          {
            "foo": "1111",
            "bar": "bbbb"
          },
          {
            "foo": "2222",
            "bar": "cccc"
          }
          ]
      }
}

这样的东西可以解决问题,但会改变JSON结构。

.foofoo.barbar[] | select(.bar !="cccc")

导致:

{
  "foo": "0000",
  "bar": "aaaa"
}
{
  "foo": "1111",
  "bar": "bbbb"
}

所需的结果是:

{
  "foofoo": {
    "barbar": [
    {
      "foo": "0000",
      "bar": "aaaa"
    }
    {
      "foo": "1111",
      "bar": "bbbb"
    }
    ]
  }
}

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试的问题是您通过编写.foofoo.barbar []扩展了.foofoo.barbar。

您想要的是重置它:

.foofoo.barbar |= map(select(.bar !="cccc"))