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

结果

在这里插入图片描述由图可知,正确将复杂对象的属性填充,至此前端可以快乐的处理这个复杂对象了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值