jq - 如何测试JSON响应中特定值的出现

时间:2016-02-03 13:09:18

标签: json jq

使用jq我想测试下面JSON中特定键值的出现,例如"警告"已经发生了严重性问题。值(甚至一次)无论返回的对象数量多少,这样我返回一个布尔值。为简单起见,我有2个对象,但可能是2000

{
  "events": [
    {
      "severity": "WARNING",
      "status": "",
      "time_raised": "1454502910919",
      "data_1": "00000000",
      "data_2": "00000000",
      "data_3": "00000000",
      "register_0": "40000",
      "register_1": "4",
      "register_2": "10",
      "register_3": "0"
    },
    {
      "severity": "ERROR",
      "status": "",
      "time_raised": "1454502840915",
      "data_1": "00000000",
      "data_2": "00000000",
      "data_3": "00000000",
      "register_0": "50000",
      "register_1": "4",
      "register_2": "8",
      "register_3": "0"
    }
  ]
}

我的方法是尝试使用'包含'像这样过滤

jq .events[]|.severity|contains("WARNING")

哪个输出

true
false

由于我想要返回一个布尔值,我在使用' contains'之前尝试将值合并为单个字符串或数组,但我找不到这样做的方式。

我宁愿把逻辑保留在jq中,所以我希望我从树上错过木头,并且在jq中有一种简单的方法。

1 个答案:

答案 0 :(得分:3)

根据您的方法,您可以,例如,简单地写:

jq '[.events[]|.severity|contains("WARNING")] | any'

或者更简洁:

jq 'any(.events[].severity; contains("WARNING"))' 

如果你想在任何对象中测试条件,无论它在哪里,那么考虑使用walk / 1.