Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算嵌套元素在JSON数据中的出现次数_Javascript_Arrays_Json_Node.js - Fatal编程技术网

Javascript 计算嵌套元素在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

如何获得嵌套元素的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"
                    }
    }
]

我需要计算出现警告和严重警告的次数,如果它出现在输出中(检查->输出)

如果这是一个新手问题,请原谅。我是新手。

您可以使用
数组#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