javascript - 计算 JSON 数据中嵌套元素的出现次数

标签 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: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/

相关文章:

javascript - 获取 JSON 对象的值

javascript - 如何在数组元素中添加数组

arrays - 基于区域随机

json - 在 Cosmos DB 中,如何在创建文档之前检测文档大小并对其使用react

javascript - 更新 firefox 55 后,内联图像 (img) 未通过 SVG 在 HTML CANVAS 中呈现

Javascript:移动二维数组

php - codeigniter 传递数组进行查询

java - GSON JSON 映射

javascript - 使用 Gson 将属性添加到 Json 数组

javascript - Angular 中未显示 View