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

Demo

jq 'any(.result[]; .host == "Server00001")'
true

Demo


您可能还想在调用 jq 时使用一些参数(请参阅 manual):例如,--arg 选项允许您添加一个变量,该变量可以是从过滤器字符串外部初始化。使用 -e(或 --exit-status)标志,您可以 jq 根据过滤器的最终结果设置退出状态。总之,这使您可以像这样使用 jq

if jq --arg host "Server0001" -e 'any(.result[]; .host == $host)';
then
  …
else
  …
fi