Javascript 计算嵌套元素在JSON数据中的出现次数
如何获得嵌套元素的JSON数据中元素的外观Javascript 计算嵌套元素在JSON数据中的出现次数,javascript,arrays,json,node.js,Javascript,Arrays,Json,Node.js,如何获得嵌套元素的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:8
[
{
"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"
}
}
]
我需要计算出现警告和严重警告的次数,如果它出现在输出中(检查->输出)
如果这是一个新手问题,请原谅。我是新手。您可以使用数组#forEach
迭代每个输出
条目,并查找警告
或关键
关键字
var-json=[{client:“172.16.109.96”,检查:{command:“/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb-h172.16.109.96:8081-t”最高电流(标度(vcenter.*.*.cpu.usage_%u平均,0.01),5)“w1-c6-p-6小时”,独立:!0,间隔:5,名称:“vm_平均”,发布:1490774610,执行:1490774610,持续时间:.142,输出:“CheckGraphiteStat警告:没有来自Graphite的数据”,状态:3,键入:“标准”},{client:“172.16.109.96”,检查:{命令:“/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'collected.*.system.memory.used.pct'-w 50-c-75-p-6hours”,独立:!0,间隔:5,名称:“mem_average”,发出:1490774614,执行:1490774614,持续时间:223,输出:“CheckGraphiteStat CRITICAL:collectd.DEMO.172_16_109_100.system.memory.used.pct为94.445555556\n”,状态:2,类型:“standard”},{client:“172.16.109.96”,检查:{命令:“/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”刻度(vcenter........................mem usage_percent_average,0.01)--w50-c75-p-6hours”,独立:!0,间隔:5,名称:“vm_-mem_-average”,发布:14924;,状态:3,键入:“标准”},{client:“172.16.109.96”,检查:{command:“/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb-h172.16.109.96:8081-t”绝对值(偏移量(collectd.*.system.cpu.idle.pct,-100))'-c7-p-6hours”,独立:!0,间隔:5,名称:“cpu平均”,发布日期:1490774613,执行日期:1490774613,持续时间:124,输出:“CheckGraphiteStat临界值:绝对值(偏移量(collectd.DEMO.172_16_109_100.system.cpu.idle.pct,-100))为10.585147058823525\n”,状态:2,类型:“标准”},
obj={};
forEach(函数(v){
var elem=v.check.output.match(/critical | warning/i)[0];
!obj[elem]?obj[elem]=1:obj[elem]++;
});
控制台日志(obj)代码>您可以使用数组#forEach
迭代每个输出
条目,并查找警告
或关键
关键字
var-json=[{client:“172.16.109.96”,检查:{command:“/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb-h172.16.109.96:8081-t”最高电流(标度(vcenter.*.*.cpu.usage_%u平均,0.01),5)“w1-c6-p-6小时”,独立:!0,间隔:5,名称:“vm_平均”,发布:1490774610,执行:1490774610,持续时间:.142,输出:“CheckGraphiteStat警告:没有来自Graphite的数据”,状态:3,键入:“标准”},{client:“172.16.109.96”,检查:{命令:“/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'collected.*.system.memory.used.pct'-w 50-c-75-p-6hours”,独立:!0,间隔:5,名称:“mem_average”,发出:1490774614,执行:1490774614,持续时间:223,输出:“CheckGraphiteStat CRITICAL:collectd.DEMO.172_16_109_100.system.memory.used.pct为94.445555556\n”,状态:2,类型:“standard”},{client:“172.16.109.96”,检查:{命令:“/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”刻度(vcenter........................mem usage_percent_average,0.01)--w50-c75-p-6hours”,独立:!0,间隔:5,名称:“vm_-mem_-average”,发布:14924;,状态:3,键入:“标准”},{client:“172.16.109.96”,检查:{command:“/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb-h172.16.109.96:8081-t”绝对值(偏移量(collectd.*.system.cpu.idle.pct,-100))'-c7-p-6hours”,独立:!0,间隔:5,名称:“cpu平均”,发布日期:1490774613,执行日期:1490774613,持续时间:124,输出:“CheckGraphiteStat临界值:绝对值(偏移量(collectd.DEMO.172_16_109_100.system.cpu.idle.pct,-100))为10.585147058823525\n”,状态:2,类型:“标准”},
obj={};
forEach(函数(v){
var elem=v.check.output.match(/critical | warning/i)[0];
!obj[elem]?obj[elem]=1:obj[elem]++;
});
控制台日志(obj)代码>您需要统计前端的响应吗?如果愿意,可以使用正则表达式解析json
var numMatches = (JSON.stringify(yourData).match(/(WARNING|CRITICAL)/g) || []).length;
这应该比迭代每个项并分别对每个属性运行单独的正则表达式要快。因此,如果您要在一个大数据集上运行,我建议您在其他解决方案中使用此解决方案。您需要计算前端的响应吗?如果愿意,可以使用正则表达式解析json
var numMatches = (JSON.stringify(yourData).match(/(WARNING|CRITICAL)/g) || []).length;
这应该比迭代每个项并分别对每个属性运行单独的正则表达式要快。因此,如果您要在一个大数据集上运行,我建议您使用此解决方案,而不是其他解决方案。您可以执行以下操作:
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)
让critialCount=0
让warningCount=0
for(设i=0;i-1){
临界数++
}
else if(数据[i].check.output.indexOf('WARNING')>-1){
警告计数++
}
}
console.log('临界计数:'+临界计数)
console.log('警告计数:'+警告计数)
工作示例:
const数据=[
{
“客户”:“172.16.109.96”,
“支票”:{
“命令”:“/var/lib/gems/1.9.1/gems/sensu-plugins-graphite-1.1.0/bin/check-graphite-stats.rb-h172.16.109.96:8081-t”最高电流(刻度(vcenter.*.cpu.usage.\u-ave