如何获取嵌套元素的 JSON 数据中元素的外观?
[
{
"client":"172.16.109.96",
"check":
{
"command":"/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'highestCurrent(scale(vcenter.*.*.*.*.cpu.usage_percent_average, 0.01), 5)' -w 1 -c 6 -p -6hours",
"standalone":true,
"interval":5,
"name":"vm_cpu_average",
"issued":1490774610,
"executed":1490774610,
"duration":0.142,
"output":"CheckGraphiteStat WARNING: No data from Graphite\n",
"status":3,
"type":"standard"
}
},
{
"client":"172.16.109.96",
"check":
{
"command":"/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'collectd.*.*.system.memory.used.pct' -w 50 -c 75 -p -6hours",
"standalone":true,
"interval":5,
"name":"mem_average",
"issued":1490774614,
"executed":1490774614,
"duration":0.223,
"output":"CheckGraphiteStat CRITICAL: collectd.DEMO.172_16_109_100.system.memory.used.pct is 94.44555555555556 \n",
"status":2,
"type":"standard"
}
},
{
"client":"172.16.109.96",
"check":
{
"command":"/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'scale(vcenter.*.*.*.*.mem.usage_percent_average, 0.01)' -w 50 -c 75 -p -6hours",
"standalone":true,
"interval":5,
"name":"vm_mem_average",
"issued":1490774614,
"executed":1490774614,
"duration":0.216,
"output":"CheckGraphiteStat WARNING: No data from Graphite\n",
"status":3,
"type":"standard"
}
},
{
"client":"172.16.109.96",
"check":
{
"command":"/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'absolute(offset(collectd.*.*.system.cpu.idle.pct, -100))' -c 7 -p -6hours",
"standalone":true,
"interval":5,
"name":"cpu_average",
"issued":1490774613,
"executed":1490774613,
"duration":0.124,
"output":"CheckGraphiteStat CRITICAL: absolute(offset(collectd.DEMO.172_16_109_100.system.cpu.idle.pct,-100)) is 10.585147058823525 \n",
"status":2,
"type":"standard"
}
}
]
如果出现在输出中(检查 -> 输出),我需要计算 WARNING 和 CRITICAL 出现的次数。
如果这是一个新手问题,请原谅。我对此很陌生。
最佳答案
你可以这样做:
let critialCount = 0
let warningCount = 0
for(let i = 0; i < data.length; i++) {
if(data[i].check.output.indexOf('CRITICAL') > -1) {
critialCount++
}
else if(data[i].check.output.indexOf('WARNING') > -1) {
warningCount++
}
}
console.log('Critical count: ' + critialCount)
console.log('Warning count: ' + warningCount)
工作示例:
const data =[
{
"client": "172.16.109.96",
"check": {
"command": "/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'highestCurrent(scale(vcenter.*.*.*.*.cpu.usage_percent_average, 0.01), 5)' -w 1 -c 6 -p -6hours",
"standalone": true,
"interval": 5,
"name": "vm_cpu_average",
"issued": 1490774610,
"executed": 1490774610,
"duration": 0.142,
"output": "CheckGraphiteStat WARNING: No data from Graphite\n",
"status": 3,
"type": "standard"
}
},
{
"client": "172.16.109.96",
"check": {
"command": "/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'collectd.*.*.system.memory.used.pct' -w 50 -c 75 -p -6hours",
"standalone": true,
"interval": 5,
"name": "mem_average",
"issued": 1490774614,
"executed": 1490774614,
"duration": 0.223,
"output": "CheckGraphiteStat CRITICAL: collectd.DEMO.172_16_109_100.system.memory.used.pct is 94.44555555555556 \n",
"status": 2,
"type": "standard"
}
},
{
"client": "172.16.109.96",
"check": {
"command": "/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'scale(vcenter.*.*.*.*.mem.usage_percent_average, 0.01)' -w 50 -c 75 -p -6hours",
"standalone": true,
"interval": 5,
"name": "vm_mem_average",
"issued": 1490774614,
"executed": 1490774614,
"duration": 0.216,
"output": "CheckGraphiteStat WARNING: No data from Graphite\n",
"status": 3,
"type": "standard"
}
},
{
"client": "172.16.109.96",
"check": {
"command": "/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb -h 172.16.109.96:8081 -t 'absolute(offset(collectd.*.*.system.cpu.idle.pct, -100))' -c 7 -p -6hours",
"standalone": true,
"interval": 5,
"name": "cpu_average",
"issued": 1490774613,
"executed": 1490774613,
"duration": 0.124,
"output": "CheckGraphiteStat CRITICAL: absolute(offset(collectd.DEMO.172_16_109_100.system.cpu.idle.pct,-100)) is 10.585147058823525 \n",
"status": 2,
"type": "standard"
}
}
]
let critialCount = 0
let warningCount = 0
for(let i = 0; i < data.length; i++) {
if(data[i].check.output.indexOf('CRITICAL') > -1) {
critialCount++
}
else if(data[i].check.output.indexOf('WARNING') > -1) {
warningCount++
}
}
console.log('Critical count: ' + critialCount)
console.log('Warning count: ' + warningCount)
关于javascript - 计算 JSON 数据中嵌套元素的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094161/