2

以前に C# で JSON を解析したことがありますが、今回は Node-Red で JavaScript を使用します。私は Web を検索し、JavaScript で JSON を解析するいくつかのソリューションを見つけましたが、すべての例で JSON は非常に単純であり、その中のデータの「レベル」は多くありませんでした。

解析する必要がある JSON ファイルの一部を提供します

{
"programStatus": {
"modified_host_attributes": "1",
"modified_service_attributes": "1",
"serial_host_check_stats": "0,0,0"
},
"hosts": {
"FILANAS01": {
  "host_name": "FILANAS01",
  "modified_attributes": "0",
  "check_command": "check-host-alive",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"FILANAS02": {
  "host_name": "FILANAS02",
  "modified_attributes": "0",
  "check_command": "check-host-alive",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"FILANSW01": {
  "host_name": "FILANSW01",
  "modified_attributes": "0",
  "check_command": "check-host-alive",
  "scheduled_downtime_depth": "0"
},
"FILANSW02": {
  "host_name": "FILANSW02",
  "modified_attributes": "0",
  "check_command": "check-host-alive",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
}
},
"services": {
"FILANSW01": {
"HP ProCurve Hardware Check": {
  "host_name": "FILANSW01",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"System Location": {
  "host_name": "FILANSW01",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
}
},
"FILANSW02": {
"HP ProCurve Hardware Check": {
  "host_name": "FILANSW02",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"System Location": {
  "host_name": "FILANSW02",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
}
},
"FILASDC02": {
"Active Directory Domain Services": {
  "host_name": "FILASDC02",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"CPU Load": {
  "host_name": "FILASDC02",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"DNS Server": {
  "host_name": "FILASDC02",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
},
"Drive Space C:": {
  "host_name": "FILASDC02",
  "current_state": "0",
  "scheduled_downtime_depth": "0"
   }
  }
 }
}

これは Nagios から生成され、サーバーとスイッチ、およびそれらに関する情報が含まれています。すべての「ホスト」を繰り返し処理し、「current_state」が何であるかを確認する必要があります。それ以外の場合は 0 で、その「ホスト」から「host_name」とその他の情報をフェッチします。

そして、「サービス」からの同じことが、0でない場合は現在の状態を確認します。

次に、この JSON から取得した情報で配列を作成し、情報画面に表示します。

しかし、JSON を使い始めるには助けが必要です。ありがとう。

4

1 に答える 1

2
 Assign the entire JSON in a JavaScript variable, complete code shown below:

` var myJSON = { "programStatus": { "modified_host_attributes": "1", "modified_service_attributes": "1", "serial_host_check_stats": "0,0,0" }, "hosts": { "FILANAS01": { " host_name": "FILANAS01", "modified_attributes": "0", "check_command": "check-host-alive", "current_state": "0", "scheduled_downtime_depth": "0" }, "FILANAS02":{ "host_name": "FILANAS02", "modified_attributes": "0", "check_command": "check-host-alive", "current_state": "0", "scheduled_downtime_depth": "0" }, "FILANSW01": { "host_name": "FILANSW01", "modified_attributes": "0", "check_command": "check-host-alive", "scheduled_downtime_depth": "0" }, "FILANSW02": { "host_name": "FILANSW02"、"modified_attributes": "0"、"check_command": "check-host-alive"、"current_state": "0"、"scheduled_downtime_depth": "0" } }、"services": { "FILANSW01": { "HP ProCurve Hardware Check": { "host_name": "FILANSW01", "current_state": "0", "scheduled_downtime_depth": "0" }, "System Location": { "host_name":"FILANSW01", "current_state": "0", "scheduled_downtime_depth": "0" } }, "FILANSW02": { "HP ProCurve ハードウェア チェック": { "host_name": "FILANSW02", "current_state": "0" , "scheduled_downtime_depth": "0" }, "システムの場所": { "host_name": "FILANSW02", "current_state": "0", "scheduled_downtime_depth": "0" } }, "FILASDC02": { "Active Directory ドメイン サービス": { "host_name": "FILASDC02", "current_state": "0", "scheduled_downtime_depth": "0" }, "CPU 負荷": { " host_name": "FILASDC02", "current_state": "0", "scheduled_downtime_depth": "0" }, "DNS サーバー": { "host_name": "FILASDC02","current_state": "0", "scheduled_downtime_depth": "0" }, "Drive Space C:": { "host_name": "FILASDC02", "current_state": "0", "scheduled_downtime_depth": "0" } } } }"current_state": "0", "scheduled_downtime_depth": "0" } } } }"current_state": "0", "scheduled_downtime_depth": "0" } } } }

Now iterate through:

var host = Object.keys(myJSON["hosts"]);
for (var i = 0; i < host.length; i++) {
      var hostData = host[i];
      var hostProp = myJSON.hosts[hostData];
      if (hostProp.current_state != 0) {
           //Do your work.
      } 
}
I've tested Object.keys() in a few browsers like IE9, IE10, Chrome 46
and FireFox, it works but fails in IE8.    
于 2015-10-15T18:42:19.483 に答える