多层复杂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);
    }
}

结果

多层复杂jsonString转对象_第1张图片由图可知,正确将复杂对象的属性填充,至此前端可以快乐的处理这个复杂对象了。

你可能感兴趣的:(java,json)