10 changed files with 178 additions and 10 deletions
@ -0,0 +1,74 @@
|
||||
package com.mh.common.model.request; |
||||
|
||||
import com.alibaba.fastjson2.JSON; |
||||
import com.alibaba.fastjson2.JSONArray; |
||||
import com.alibaba.fastjson2.JSONObject; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author LJF |
||||
* @version 1.0 |
||||
* @project EEMCS |
||||
* @description 昆仑通态触摸屏数据转换 |
||||
* @date 2026-02-02 15:29:47 |
||||
*/ |
||||
public class AdvantechJsonParser { |
||||
|
||||
/** |
||||
* 将JSON字符串解析为 AdvantechReceiver<AdvantechDatas<Number>> |
||||
* @param json 原始MQTT JSON |
||||
* @param defaultQuality quality默认值(如192表示Good),传null则不设置 |
||||
* @return 解析后的接收对象 |
||||
*/ |
||||
public static AdvantechReceiver<AdvantechDatas<Number>> parse( |
||||
String json, |
||||
Number defaultQuality) { |
||||
|
||||
JSONObject root = JSON.parseObject(json); |
||||
AdvantechReceiver<AdvantechDatas<Number>> receiver = new AdvantechReceiver<>(); |
||||
|
||||
// 1. 提取ts(保留原始字符串格式)
|
||||
// "2026-02-02T18:33:57.712049"时间格式是这个,转成yyyy-MM-dd HH:mm:ss
|
||||
root.put("ts", root.getString("ts").replace("T", " ").substring(0, 19)); |
||||
receiver.setTs(root.getString("ts")); |
||||
|
||||
// 2. 解析d数组:展开所有键值对 → AdvantechDatas
|
||||
List<AdvantechDatas<Number>> dataList = new ArrayList<>(); |
||||
JSONArray dArray = root.getJSONArray("d"); |
||||
|
||||
if (dArray != null) { |
||||
for (int i = 0; i < dArray.size(); i++) { |
||||
JSONObject item = dArray.getJSONObject(i); |
||||
if (item == null || item.isEmpty()) continue; |
||||
|
||||
for (Map.Entry<String, Object> entry : item.entrySet()) { |
||||
String tag = entry.getKey(); |
||||
Object val = entry.getValue(); |
||||
|
||||
if (val instanceof Number) { |
||||
AdvantechDatas<Number> data = new AdvantechDatas<>(); |
||||
data.setTag(tag); |
||||
data.setValue((Number) val); |
||||
if (defaultQuality != null) { |
||||
data.setQuality(defaultQuality); |
||||
} |
||||
dataList.add(data); |
||||
} |
||||
// 非数值字段自动跳过(可扩展日志)
|
||||
} |
||||
} |
||||
} |
||||
|
||||
receiver.setD(dataList); |
||||
return receiver; |
||||
} |
||||
|
||||
// 便捷重载:不设置quality
|
||||
public static AdvantechReceiver<AdvantechDatas<Number>> parse(String json) { |
||||
return parse(json, 0); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue