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。
使用 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。