У меня есть следующий набор данных в базе данных Elasticsearch
"hits": [
{
"_index": "autotopology",
"_type": "topologydata",
"_id": "AWYum6htsO8xYxsN28QK",
"_score": 0.47000363,
"_source": {
"host": "192.168.0.223",
"os": "Linux",
"services": [
{
"port": "80",
"protocol": "tcp",
"status": "open",
"service": "http"
},
{
"port": "2181",
"protocol": "tcp",
"status": "open",
"service": "eforward"
},
{
"port": "3000",
"protocol": "tcp",
"status": "open",
"service": "ppp"
},
{
"port": "3306",
"protocol": "tcp",
"status": "open",
"service": "mysql"
},
{
"port": "3340",
"protocol": "tcp",
"status": "open",
"service": "anet-m"
},
{
"port": "4567",
"protocol": "tcp",
"status": "open",
"service": "tram"
},
{
"port": "5601",
"protocol": "tcp",
"status": "open",
"service": "esmagent"
},
{
"port": "5665",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "5800",
"protocol": "tcp",
"status": "open",
"service": "vnc-http"
},
{
"port": "5900",
"protocol": "tcp",
"status": "open",
"service": "vnc"
},
{
"port": "6556",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "8009",
"protocol": "tcp",
"status": "open",
"service": "ajp13"
},
{
"port": "8080",
"protocol": "tcp",
"status": "open",
"service": "http-proxy"
},
{
"port": "8888",
"protocol": "tcp",
"status": "open",
"service": "sun-answerbook"
},
{
"port": "9200",
"protocol": "tcp",
"status": "open",
"service": "wap-wsp"
},
{
"port": "9300",
"protocol": "tcp",
"status": "open",
"service": "vrace"
},
{
"port": "10514",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "24224",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "27017",
"protocol": "tcp",
"status": "open",
"service": "mongod"
},
{
"port": "33556",
"protocol": "tcp",
"status": "open",
"service": "unknown"
}
],
"time": 1538380216803,
"customerID": "customer1234560000"
}
},
{
"_index": "autotopology",
"_type": "topologydata",
"_id": "AWY-hRMpVsmS0VCKavLL",
"_score": 0.47000363,
"_source": {
"host": "192.168.0.223",
"os": "Linux",
"services": [
{
"port": "80",
"protocol": "tcp",
"status": "open",
"service": "http"
},
{
"port": "2181",
"protocol": "tcp",
"status": "open",
"service": "eforward"
},
{
"port": "2393",
"protocol": "tcp",
"status": "open",
"service": "ms-olap1"
},
{
"port": "3000",
"protocol": "tcp",
"status": "open",
"service": "ppp"
},
{
"port": "3306",
"protocol": "tcp",
"status": "open",
"service": "mysql"
},
{
"port": "4567",
"protocol": "tcp",
"status": "open",
"service": "tram"
},
{
"port": "5601",
"protocol": "tcp",
"status": "open",
"service": "esmagent"
},
{
"port": "5665",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "5800",
"protocol": "tcp",
"status": "open",
"service": "vnc-http"
},
{
"port": "5900",
"protocol": "tcp",
"status": "open",
"service": "vnc"
},
{
"port": "6556",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "8009",
"protocol": "tcp",
"status": "open",
"service": "ajp13"
},
{
"port": "8080",
"protocol": "tcp",
"status": "open",
"service": "http-proxy"
},
{
"port": "8888",
"protocol": "tcp",
"status": "open",
"service": "sun-answerbook"
},
{
"port": "9200",
"protocol": "tcp",
"status": "open",
"service": "wap-wsp"
},
{
"port": "9300",
"protocol": "tcp",
"status": "open",
"service": "vrace"
},
{
"port": "10514",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "24224",
"protocol": "tcp",
"status": "open",
"service": "unknown"
},
{
"port": "27017",
"protocol": "tcp",
"status": "open",
"service": "mongod"
},
{
"port": "33556",
"protocol": "tcp",
"status": "open",
"service": "unknown"
}
]
Как вы можете видеть в обоих документах, большинство значений повторяются, когда я получаю и анализирую эти данные, мне нужно пропустить добавление повторных сервисов в jsonobject..
На данный момент я сделал следующие вещи
List<JSONObject> serviceNodeList = new ArrayList<JSONObject>();
JSONObject jsonObj = new JSONObject("read json data);
JSONArray array = jsonObj.getJSONObject("hits").getJSONArray("hits");
for (int i = 0; i < array.length(); i++) {
JSONObject innerObj = array.getJSONObject(i);
String host = innerObj.getJSONObject("_source").getString("host");
JSONArray serviceList = innerObj.getJSONObject("_source").getJSONArray("services");
for (int j = 0; j < serviceList.length(); j++) {
JSONObject serviceObject2 = new JSONObject();
JSONObject serviceObj = serviceList.getJSONObject(j);
String service = (String) serviceObj.get("service");
String port = serviceObj.getString("port");
String protocol = serviceObj.getString("protocol");
System.out.println(serviceObj.get("service"));
System.out.println("-----------");
list.add(obj);
serviceObject2.put("shape", "image");
serviceObject2.put("label", service);
File f = new File("images/" + service + ".png");
serviceObject2.put("image", "images/Circle-icon.png");
serviceObject2.put("widthMin", 15);
serviceObject2.put("widthMax", 15);
serviceObject2.put("x", 100);
serviceObject2.put("y", 100);
serviceObject2.put("title", "Server/Host: " + host + "\n" + "Port :" + port);
serviceObject2.put("value", 1);
serviceObject2.put("port", port);
serviceObject2.put("protocol", protocol);
serviceNodeList.add(serviceObject2);
}
}
здесь я не хочу добавлять повторяющиеся сервисы в jsonObject.