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