多层复杂jsonString转对象
背景
在开发过程中,有遇到需要透传其他子系统的接口信息的业务,看到相关对接接口的wiki文档。返回参数复杂的一批,此篇文章记录自己本人如何处理这种复杂json格式的,以便后续温故而知新。
demoDTO
package com.yusenliang.springlearnproject.DTO;
import lombok.Data;
import java.util.List;
@Data
public class Layer1 { //层次1
List<Object> layer2;
String layer1str;
}
-------------------------------------------------
@Data
public class Layer2 { //层次2
List<Object> layer3;
String layer2str;
}
--------------------------------------------------
@Data
public class Layer3 {//层次3
Object layer4;
String layer3str;
}
---------------------------------------------------
@Data
public class Layer4 {//层次4
String layer4str;
}
demoJsonString
[
{
"layer2":[
{
"layer3":[
{
"layer4":{
"layer4str":"虞森良"
},
"layer3str":"layer3str"
}
],
"layer2str":"layer2str"
}
],
"layer1str":"layer1"
}
]
处理思路
1.遇到List 使用JSONArray.parseArray解析
2.遇到Object 使用JSON.parseObject解析
3.DTO中自定义类型一定要用Object代替
实现过程
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import java.util.Collections;
import java.util.List;
public class main {
public static void main(String[] args) {
String resultStr = "[{\n" +
"\t\"layer2\":[{\"layer3\": [{\n" +
"\t\t\"layer4\": {\"layer4str\":\"虞森良\"},\"layer3str\":\"layer3str\"\n" +
"\t}],\"layer2str\":\"layer2str\"}],\"layer1str\":\"layer1\"\n" +
"}]";
List<Layer1> layer1s = JSONArray.parseArray(resultStr, Layer1.class);
for (int i = 0; i < layer1s.size(); i++) {
List<Layer2> layer2s = JSONArray.parseArray(layer1s.get(i).getLayer2().toString(), Layer2.class);
for (int j = 0; j < layer2s.size(); j++) {
List<Layer3> layer3s = JSONArray.parseArray(layer2s.get(j).getLayer3().toString(), Layer3.class);
for (int k = 0; k < layer3s.size(); k++) {
Layer4 layer4 = JSON.parseObject(layer3s.get(k).getLayer4().toString(),Layer4.class);
layer3s.get(k).setLayer4(layer4);
}
layer2s.get(j).setLayer3(Collections.singletonList(layer3s));
}
layer1s.get(i).setLayer2(Collections.singletonList(layer2s));
}
System.out.println(layer1s);
}
}
结果
由图可知,正确将复杂对象的属性填充,至此前端可以快乐的处理这个复杂对象了。