使用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中有一种简单的方法。
答案 0 :(得分:3)
根据您的方法,您可以,例如,简单地写:
jq '[.events[]|.severity|contains("WARNING")] | any'
或者更简洁:
jq 'any(.events[].severity; contains("WARNING"))'
如果你想在任何对象中测试条件,无论它在哪里,那么考虑使用walk / 1.