Json 使用 Jq 解析、读取并 return 如果发现错误则返回真
Json use Jq to parse, read and return true if enrty found
抱歉,如果这是基本的,但 jq 的文档不是很好
我有这个 json:
{
"jsonrpc": "2.0",
"result": [{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [{
"interfaceid": "1",
"ip": "127.0.0.1"
}]
}, {
"hostid": "10336",
"host": "AUTO",
"interfaces": [{
"interfaceid": "4",
"ip": "1.2.3.4"
}]
}, {
"hostid": "10337",
"host": "AUTOSERVER",
"interfaces": [{
"interfaceid": "5",
"ip": "4.5.6.7"
}]
}, {
"hostid": "10348",
"host": "Server00001",
"interfaces": [{
"interfaceid": "16",
"ip": "4.5.6.7"
}]
}],
"id": 2
}
我需要找到一种方法来使用 jq 来查找其中一个主机中是否存在“Server0001”
我知道我可以使用 grep 但我更喜欢在这里使用 jq,比如 select..
任何对好的文档的帮助或参考都将不胜感激
any
(见manual)可以return一个布尔值如果一个条件至少匹配一个项目。
jq 'any(.result[]; .host == "Server0001")'
false
jq 'any(.result[]; .host == "Server00001")'
true
您可能还想在调用 jq
时使用一些参数(请参阅 manual):例如,--arg
选项允许您添加一个变量,该变量可以是从过滤器字符串外部初始化。使用 -e
(或 --exit-status
)标志,您可以 jq
根据过滤器的最终结果设置退出状态。总之,这使您可以像这样使用 jq
:
if jq --arg host "Server0001" -e 'any(.result[]; .host == $host)';
then
…
else
…
fi
抱歉,如果这是基本的,但 jq 的文档不是很好 我有这个 json:
{
"jsonrpc": "2.0",
"result": [{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [{
"interfaceid": "1",
"ip": "127.0.0.1"
}]
}, {
"hostid": "10336",
"host": "AUTO",
"interfaces": [{
"interfaceid": "4",
"ip": "1.2.3.4"
}]
}, {
"hostid": "10337",
"host": "AUTOSERVER",
"interfaces": [{
"interfaceid": "5",
"ip": "4.5.6.7"
}]
}, {
"hostid": "10348",
"host": "Server00001",
"interfaces": [{
"interfaceid": "16",
"ip": "4.5.6.7"
}]
}],
"id": 2
}
我需要找到一种方法来使用 jq 来查找其中一个主机中是否存在“Server0001” 我知道我可以使用 grep 但我更喜欢在这里使用 jq,比如 select.. 任何对好的文档的帮助或参考都将不胜感激
any
(见manual)可以return一个布尔值如果一个条件至少匹配一个项目。
jq 'any(.result[]; .host == "Server0001")'
false
jq 'any(.result[]; .host == "Server00001")'
true
您可能还想在调用 jq
时使用一些参数(请参阅 manual):例如,--arg
选项允许您添加一个变量,该变量可以是从过滤器字符串外部初始化。使用 -e
(或 --exit-status
)标志,您可以 jq
根据过滤器的最终结果设置退出状态。总之,这使您可以像这样使用 jq
:
if jq --arg host "Server0001" -e 'any(.result[]; .host == $host)';
then
…
else
…
fi