jq仅在对象不匹配时显示

时间:2017-10-19 20:31:48

标签: json shell jq

我正在尝试设置一个警报,指出以下JSON对象状态何时显示但未启动。我开始玩条件jq,但我不确定如何将regex实现到此。

{
  "page": 0,
  "page_size": 100,
  "total_pages": 10,
  "total_rows": 929,
  "headers": [
    "*"
  ],
  "rows": [
    {
      "id": "168",
      "state": "STARTED"
    },
    {
      "id": "169",
      "state": "FAILED"
    },
    {
      "id": "170",
      "state": "STARTED"
    }
  ]
}

我只想显示失败对象的id和状态,这就是我试过的

jq '.rows[] | .id, select(.state | contains("!STARTED"))' test.json

我希望我的输出类似于

{
 "id": "169",
 "state": "FAILED"
}

1 个答案:

答案 0 :(得分:1)

如果您只想打印出.state不是" STARTED"的对象,只需使用否定:

.rows[] | select(.state != "STARTED")

如果"开始" state与多个值相关联,请提供更多详细信息。可能没有必要使用正则表达式。如果您确实需要使用正则表达式,那么您可能希望使用test