首页 > 解决方案 > 在“del”内的“select”中使用带有“contains”的 jq 不起作用

问题描述

我尝试从 json 中的字典中删除一些条目。它通过使用 == 工作,但包含它不起作用。

Jq调用工作:

jq 'del(.entries[] | select(.var == "foo"))' input.json

Jq 调用不工作:

jq 'del(.entries[] | select(.var | contains("foo")))' input.json

输入.json:

{
  "entries": [
    {
      "name": "test1",
      "var": "foo"
    },
    {
      "name": "test2",
      "var": "bar"
    }
  ]
}

输出:

{
  "entries": [
    {
      "name": "test2",
      "var": "bar"
    }
  ]
}

jq '.entries[] | select(.var == "foo")' input.jsonand的结果jq '.entries[] | select(.var | contains("foo"))' input.json是一样的,所以我认为这两个del调用也应该起作用。

这是jq中的错误还是我做错了什么?

标签: jsonjq

解决方案


这一定是一个错误,因为它似乎在jq1.6 上完美运行(在这里尝试)。

如果您无法更新到jq1.6,您应该可以使用以下命令,我已在jq1.5 上成功测试过:

jq '.entries |= map(select(.var | contains("foo") | not))' file.json

推荐阅读