优化代码: private static MapString Object parseJSON2MapString jsonStr MapString Object map = new HashMapString Object; 最外层解析 JSONObject json = JSONObjectfromObjectjsonStr
改进后的代码:
private static Map<String, Object> parseJSON2Map(String jsonStr) { Map<String, Object> map = new HashMap<>();
JSONObject json = JSONObject.fromObject(jsonStr);
for (String key : json.keySet()) {
Object value = json.get(key);
if (value instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<>();
for (Object obj : (JSONArray) value) {
list.add(parseJSON2Map(obj.toString()));
}
map.put(key, list);
} else if (value instanceof JSONObject) {
map.put(key, parseJSON2Map(value.toString()));
} else {
map.put(key, value);
}
}
return map;
}
public static void JsonMapData(String json) throws Exception { Map<String, Object> map = parseJSON2Map(json); if (map.containsKey("data")) { MySqlRuleDelete(); JSONObject data = (JSONObject) map.get("data"); Map<String, Object> deviceMap = (Map<String, Object>) data.get("deviceProfileData"); devicename = (String) deviceMap.get("name"); String deviceProfileDataStr = deviceMap.get("deviceProfileData").toString();
if (deviceProfileDataStr.length() > 170) {
for (String severity : Arrays.asList("MAJOR", "MINOR", "CRITICAL")) {
JSONObject severityJson = (JSONObject) ((Map<String, Object>) ((Map<String, Object>) ((List<Object>) deviceMap.get("alarms")).get(0)).get("createRules")).get(severity);
if (severityJson != null) {
Map<String, Object> severityMap = parseJSON2Map(severityJson.toString());
List<Map<String, Object>> conditions = (List<Map<String, Object>>) severityMap.get("condition");
if (conditions.size() > 1) {
List<String> operations = new ArrayList<>();
List<Double> defaultValues = new ArrayList<>();
for (Map<String, Object> condition : conditions) {
Map<String, Object> predicate = (Map<String, Object>) condition.get("predicate");
operations.add((String) predicate.get("operation"));
defaultValues.add(Double.parseDouble(((Map<String, Object>) predicate.get("value")).get("defaultValue").toString()));
}
jedis.mset("devicename", devicename, "entity_id", (String) ((Map<String, Object>) ((List<Object>) deviceMap.get("alarms")).get(0)).get("id"), "model", severity, "operation", String.join(",", operations), "defaultValue", String.join(",", defaultValues.stream().map(String::valueOf).collect(Collectors.toList())), "i", String.valueOf(conditions.size()));
MySqlRuleInset(jedis.get("devicename"), jedis.get("entity_id"), jedis.get("model"), jedis.get("operation"), defaultValues.get(0), conditions.size());
} else {
Map<String, Object> predicate = (Map<String, Object>) conditions.get(0).get("predicate");
String operation = (String) predicate.get("operation");
Double defaultValue = Double.parseDouble(((Map<String, Object>) predicate.get("value")).get("defaultValue").toString());
jedis.mset("devicename", devicename, "entity_id", (String) ((Map<String, Object>) ((List<Object>) deviceMap.get("alarms")).get(0)).get("id"), "model", severity, "operation", operation, "defaultValue", String.valueOf(defaultValue), "i", "1");
MySqlRuleInset(jedis.get("devicename"), jedis.get("entity_id"), jedis.get("model"), jedis.get("operation"), defaultValue, 1);
}
}
}
} else if (deviceProfileDataStr.length() < 168) {
jedis.set("Error", "PassRule");
}
}
}
public static void MySqlRuleInset(String devicename, String entity_id, String key, String operation, Double defaultValue, int operation_num) { try { RuleSqlStruct pressure = new RuleSqlStruct(devicename, entity_id, key, operation, defaultValue, operation_num); RulepressDao pressureDao = new RulepressureDaoImpl(); pressureDao.insertData(pressure, "rule_kv"); } catch (Exception e) { System.out.println("\n告警规则参数插入数据库失败!"); } }
public static void MySqlRuleDelete() { try { RulepressDao pressureDao = new RulepressureDaoImpl(); pressureDao.deleteData(); System.out.println("\n翻新告警规则参数,清空数据库成功!"); } catch (Exception e) { System.out.println("\n翻新告警规则参数,清空数据库失败!"); } }
原文地址: https://www.cveoy.top/t/topic/bId4 著作权归作者所有。请勿转载和采集!