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

jq - How to test for the occurrence of a particular value in a JSON response

使用 jq 我想测试下面 JSON 中特定键值的出现,例如 "WARNING" 作为 'severity' 值出现(甚至一次) 无论 returned 对象的数量如何,我 return 都是一个布尔值。为简单起见,我在下面有 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"
    }
  ]
}

我的方法是尝试像这样使用 'contains' 过滤器

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

输出

true
false

因为我想要一个单一的布尔值 returned,所以我在使用 'contains' 之前尝试将这些值合并到一个字符串或数组中,但我找不到方法来做到这一点。

我宁愿将逻辑保留在 jq 中,所以我希望我已经漏掉了树中的木头,并且在 jq 中有一种简单的方法可以做到这一点。

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

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

或更简洁:

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

如果您想测试任何对象中的条件,无论它在哪里,请考虑使用 walk/1。