由于项目需要需要解析JSON,成为LIST
1.支持的格式
2.项目需要的pom
3.项目源码
3.1 项目的测试VO
3.2 项目的工具类
4.测试结果
1.可以支持的格式如下:
格式1:{"seqNo":"1","updateTime":"20220527","obj":{"clazz":"two","grade":"one"}}
格式2:{"seqNo":"1","updateTime":"20220527","obj":{"clazz":"two","grade":"one","list":[{"sex":"male","age":"18","name":"xiaosan"},{"sex":"female","age":"20","name":"lisan"}]}}
格式3:{"seqNo":"1","updateTime":"20220527","list":[{"sex":"male","age":"18","name":"xiaosan"},{"sex":"female","age":"20","name":"lisan"}]}
2.项目需要的pom
cn.hutool hutool-all5.6.6 org.projectlombok lombok1.18.24 provided
3.项目源码
3.1 项目的测试VO
package com.sun.common;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class Student {
private String id;
private String seqNo;
private String updateTime;
private String clazz;
private String grade;
private String sex;
private String age;
private String name;
private LocalDateTime createTime;
}
3.2 项目的工具类
package com.sun.common;
import cn.hutool.json.JSONObject;
import java.time.LocalDateTime;
import java.util.*;
public class Test {
private static String msg1 = "{"seqNo":"1","updateTime":"20220527","obj":{"clazz":"two","grade":"one"}}";
private static String msg2 = "{"seqNo":"1","updateTime":"20220527","obj":{"clazz":"two","grade":"one","list":[{"sex":"male","age":"18","name":"xiaosan"},{"sex":"female","age":"20","name":"lisan"}]}}";
private static String msg3 = "{"seqNo":"1","updateTime":"20220527","list":[{"sex":"male","age":"18","name":"xiaosan"},{"sex":"female","age":"20","name":"lisan"}]}";
public static void main(String[] args) {
System.out.println(String.format("msg=%s", msg1));
System.out.println(String.format("msg=%s", msg2));
System.out.println(String.format("msg=%s", msg3));
List students = json2Bean(msg1, Student.class);
for (Student student : students) {
System.out.println(student);
}
}
private static List json2Bean(String msg, Class t) {
JSONObject object = new JSONObject(msg);
Map map = object.toBean(Map.class);
Map objMap = new HashMap();
List valueList = null;
List result = new ArrayList();
for (Object key : map.keySet()) {
Object valueObj = map.get(key);
if (valueObj instanceof String) {
objMap.put(key, valueObj);
} else if (valueObj instanceof List) {
valueList = (List) valueObj;
} else {
Map valueMap = (Map) valueObj;
if (isAllStringKey(valueMap)) {
objMap.putAll(valueMap);
} else {
valueList = getValueList(objMap, valueMap);
}
}
}
setDefaultParam(objMap);
if (valueList != null) {
for (Object value : valueList) {
Map valueMap = (Map) value;
valueMap.putAll(objMap);
result.add(new JSONObject(valueMap).toBean(t));
}
return result;
}
result.add(new JSONObject(objMap).toBean(t));
return result;
}
private static List getValueList(Map objMap, Map valueMap) {
List valueList = null;
for (Object key : valueMap.keySet()) {
Object valueObj = valueMap.get(key);
if (valueObj instanceof String) {
objMap.put(key, valueObj);
} else if (valueObj instanceof List) {
valueList = (List) valueObj;
}
}
return valueList;
}
private static boolean isAllStringKey(Map valueMap) {
for (Object key : valueMap.keySet()) {
Object valueObj = valueMap.get((String) key);
if (valueObj instanceof List) {
return false;
}
}
return true;
}
private static void setDefaultParam(Map objMap) {
objMap.put("id", UUID.randomUUID());
objMap.put("createTime", LocalDateTime.now());
}
}
4.测试结果
msg={"seqNo":"1","updateTime":"20220527","obj":{"clazz":"two","grade":"one"}}
msg={"seqNo":"1","updateTime":"20220527","obj":{"clazz":"two","grade":"one","list":[{"sex":"male","age":"18","name":"xiaosan"},{"sex":"female","age":"20","name":"lisan"}]}}
msg={"seqNo":"1","updateTime":"20220527","list":[{"sex":"male","age":"18","name":"xiaosan"},{"sex":"female","age":"20","name":"lisan"}]}
Student(id=c30b4d16-8aaf-4d1f-8c80-b1b90700df65, seqNo=1, updateTime=20220527, clazz=two, grade=one, sex=null, age=null, name=null, createTime=2022-05-28T00:40:57.235)



