> 文档中心 > JAVA阈值告警字符串解析

JAVA阈值告警字符串解析


数据库字段

alarm_threshold 阈值

实体类:
解析json字符串中:data中根据这三个字段进行判断

@Datapublic class AlarmThresholdData {    private String alarmLvId;//告警id    private String conditional;//阈值判断    private String value;//数据值}

具体方法json解析循环遍历取值:

 /     * 阈值告警     */    @PostMapping("/alarmInfo")    public CommonResult<List<DeviceDto>> alarmInfo(@RequestParam(required = false) String name,  @RequestParam(required = false) String curpage,  @RequestParam(required = false) String typeid    ) { List<DeviceDto> deviceDtoList = new ArrayList<>(); Map<String, Object> param = new HashMap<>(); param.put("name", name); param.put("curpage", "0"); param.put("typeid", ""); //服务之间远程调用取到数据 String rs1 = HttpRequest.post(URL_PATH_1).form(param).send().charset("utf-8").bodyText().replace("/", ""); //此处因为data  rs records循环嵌套三层所以逐层解析 JSONObject jsonObj = JSONObject.parseObject(rs1); JSONObject data = JSONObject.parseObject(jsonObj.getString("data")); JSONObject rs = JSONObject.parseObject(data.getString("rs")); List<Device> records = JSONObject.parseObject(rs.getString("records"), List.class); //循环遍历records取每条的数据值  Devcie是设备实体类 if (records.size() > 0) {     for (int i = 0; i < records.size(); i++) {  Device item = JSONObject.parseObject(JSONObject.toJSONString(records.get(i)), Device.class);  //取到设备id  String id = item.getId();  //alarmThreshold 是告警字段 做判空处理  JSONArray alarmThreshold = JSONArray.parseArray(item.getAlarmThreshold());  if (alarmThreshold != null && alarmThreshold.size() > 0) {      for (int h = 0; h < alarmThreshold.size(); h++) {      //取到alarmThreshold 该字段的json数值   String alarmThresholds = String.valueOf(JSONObject.parseObject(alarmThreshold.getString(h)).get("data"));   //解析该字段   List<AlarmThresholdData> alarmThresholdData = JSONObject.parseObject(alarmThresholds, ArrayList.class);   //继续循环遍历解析该字段库里是多个json拼接。循环取出单个 [{"data":[{"alarmLvId":"xxxx","conditional":"gt","value":"220"},{"alarmLvId":"xxxxx","conditional":"lt","value":"12"}],"key":"FDJ2_DCDY"},{"data":[{"alarmLvId":"1","conditional":"gt","value":"100"}],"key":"FDJ2_IB"}]   for (int a = 0; a < alarmThresholdData.size(); a++) {AlarmThresholdData items = JSONObject.parseObject(JSONObject.toJSONString(alarmThresholdData.get(a)), AlarmThresholdData.class);//取出每个json单个数值String alarmLvId = items.getAlarmLvId();String value = items.getValue();String conditional = items.getConditional();if (conditional.equals("eq")) {    conditional = "等于";}if (conditional.equals("neq")) {    conditional = "不等于";}if (conditional.equals("gt")) {    conditional = "大于";}if (conditional.equals("lt")) {    conditional = "小于";}if (conditional.equals("get")) {    conditional = "大于等于";}if (conditional.equals("lte")) {    conditional = "小于等于";}//得到keyString key = String.valueOf(JSONObject.parseObject(alarmThreshold.getString(h)).get("key"));JSONArray deviceValues = JSONObject.parseArray(item.getDeviceValues());if (deviceValues != null && deviceValues.size() > 0) {    for (int j = 0; j < deviceValues.size(); j++) { DeviceDto deviceDto = new DeviceDto(); System.out.println(deviceDto); String times = String.valueOf(JSONObject.parseObject(deviceValues.getString(j)).get("time")); String values = String.valueOf(JSONObject.parseObject(deviceValues.getString(j)).get("value")); String names = String.valueOf(JSONObject.parseObject(deviceValues.getString(j)).get("name")); String alarms = "阈值告警"; if (values != null) {     deviceDto.setId(id);//报警id     deviceDto.setAlarm(alarms);     deviceDto.setName(names);//报警名称     deviceDto.setTime(times);//时间     deviceDto.setAlarmLvId(alarmLvId);     deviceDto.setKey(key);     deviceDto.setConditional(conditional);     deviceDto.setValue(value);     deviceDtoList.add(deviceDto); } //插入到log表 SysAlarmLog alarmLog = new SysAlarmLog(); alarmLog.setDeviceId(item.getId()); alarmLog.setAlertDisplayName(names); alarmLog.setFired("true触发告警"); alarmLog.setReason(alarms + names + key + conditional + value); alarmLog.setResults("pass"); alarmLog.setCreateUser("admin"); alarmLog.setUpdateUser("admin"); alarmLog.setStatus("Success"); sysAlarmLogService.addData(alarmLog);    }}   }      }  }     } } return new CommonResult<>(CommonResult.SUCCESS, CommonResult.MESSAGE_SUCCESS, deviceDtoList);    }

打印数据

 "code": 200,    "message": "SUCCESS",    "data": [ {     "id": "DVC202107130434290000304005638",     "name": "2#发电机电池电压",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机功率因素",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机IA",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机IB",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机IC",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机启动次数",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机燃油压力",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机转速",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机水温",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机UAB",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" }, {     "id": "DVC202107130434290000304005638",     "name": "2#发电机UBC",     "deviceValues": null,     "time": "2021-07-16 11:13:00",     "alarm": "阈值告警",     "alarmLvId": "1",     "conditional": "大于",     "value": "220",     "key": "FDJ2_DCDY" },