![](/img/trans.png)
[英]Can't get the desired output of this binary search program in c language
[英]JQ not parsing desired output, can't fetch numbers with string
我的json看起来像。
{
"cgi_json_version": "1.8.0",
"status": {
"hostgroup_summary": [
{ "hostgroup_name": "ESXI",
"hosts_up": 9, "hosts_down": 0,
"hosts_down_unacknowledged": 0, "hosts_down_scheduled": 0,
"hosts_down_acknowledged": 0, "hosts_down_disabled": 0,
"hosts_unreachable": 0, "hosts_unreachable_unacknowledged": 0,
"hosts_unreachable_scheduled": 0, "hosts_unreachable_acknowledged": 0,
"hosts_unreachable_disabled": 0, "hosts_pending": 0,
"services_ok": 0, "services_warning": 0,
"services_warning_unacknowledged": 0, "services_warning_host_problem": 0,
"services_warning_scheduled": 0, "services_warning_acknowledged": 0,
"services_warning_disabled": 0, "services_unknown": 0,
"services_unknown_unacknowledged": 0,
"services_unknown_host_problem": 0, "services_unknown_scheduled": 0,
"services_unknown_acknowledged": 0, "services_unknown_disabled": 0,
"services_critical": 0, "services_critical_unacknowledged": 0,
"services_critical_host_problem": 0, "services_critical_scheduled": 0,
"services_critical_acknowledged": 0, "services_critical_disabled": 0,
"services_pending": 0
}
]
}
}
我只想获取hosts_up:9或简单地获取数字9 ,尝试了许多示例,但效果不佳,请帮帮我。
正如@ mklement0指出的那样,您可以编写:
$ jq '.status.hostgroup_summary[].hosts_up' input.json
9
但是请注意, .keyname
技巧仅在键名是字母数字并且具有前导字母字符时才起作用(可以理解,_在这里算作字母字符)。 通常,。[“ KEY”]格式更可靠。 因此,许多其他选择之一是:
jq '.["status"]["hostgroup_summary"][] | .["hosts_up"]'
要发出对象,可以使用{ "KEY" }
缩写:
$ jq '.status.hostgroup_summary[] | { "hosts_up" }' input.json
{
"hosts_up": 9
}
如果您想要一种完全不了解“ hosts_up”键的确切位置的方法,请考虑:
$ jq '.. | .hosts_up? | select(.)'
如果有的话,这将获取与“ hosts_up”键关联的所有真实值。 (在这里,Truthy表示既不为null也不为false。)如果要获取与给定键关联的所有值,则必须检查该键是否存在:
$ jq '.. | select(type == "object" and has("hosts_up")) | .hosts_up'
使用最新版本的jq,可以将最后一个缩短为:
$ jq '.. | objects | select(has("hosts_up")) | .hosts_up'
使用样本输入,使用适当构造的感兴趣关键的路径即可轻松提取感兴趣的值 :
$ jq '.status.hostgroup_summary[0].hosts_up' file
9
顶级键status
子键hostgroup_summary
是一个数组 ,因此需要使用[0]
定位第一个元素。
可以通过这种方式检索任何JSON类型的值,无论它是否是数字,并且从技术上讲,输出始终是字符串 ,尽管jq
默认情况下会保留JSON值格式(数字和布尔值的不带引号的输出,双引号的输出否则;如JSON中的数组)。
对于标量值,可以添加选项-r
(原始输出)以省略双引号。
如果数组包含多个条目,并且您要提取所有条目 ,则只需使用[]
而不是[0]
:
$ jq '.status.hostgroup_summary[].hosts_up' file
9
注意,只有一个数组元素,结果是相同的,但是如果有多个数组元素,则每个值将打印在单独的行上。
要返回进入/ IES 作为一个整体 ,作为包含密钥字符串JSON以及,使用下面的一样,也表现在峰值的答案:
$ jq '.status.hostgroup_summary[] | { "hosts_up" }' file
{
"hosts_up": 9
}
附带说明:如果您的路径包含以ASCII字母,数字或_
开头的键,则必须将其双引号 ; 否则 ,必须使用双引号 。 例如
$ jq '.status."0key"' <<<'{ "status": { "0key": 9 } }' # Note the "..." around 0key
9
| jq -r '.[] | .[] | .[] | .hosts_up'
伙计之上..您的不赞成投票鼓励我越来越多地在Google上找到答案,希望我找到了确切的答案。
参考- 使用jq从json输出中获取键值
我是系统管理员,所以我无法一直在这里展示我所有的热门歌曲和试用版..希望您能理解!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.