fastjson处理map类型的json字符串

直接上图

解析map类型Json串得到list对象然后遍历

public class FastJsonTest {

    public static void main(String[] args) {
        //先建一个带map类型的Json字符串,其中value的类型是List
        //创一个key是名字.value包含班级老师信息的list
        String jsonStr="{\"张三\":[{\"grade\":\"三年级\",\"teacher\":\"王老师\"}],\"李四\":[{\"grade\":\"四年级\",\"teacher\":\"李老师\"}],\"王五\":[{\"grade\":\"五年级\",\"teacher\":\"张老师\"}]}\n";
        ***********2021.03.22
        **补充:后来别人指导我这个小白一个更加简单的办法可以直接一步到位**
        *使用TypeReference*
        Map<String,List<TestDO>> map= JSON.parseObject(jsonStr, new TypeReference<Map<String,List<TestDO>>>() {});
        可以直接得到Map里面的list对象
        仍需努力呀
        ***********2021.03.22

        //将json字符串转换成Map对象
        Map<String,List<StuInfo>> map = JSONObject.parseObject(jsonStr, Map.class);
        //在外面把list先定义好
        List<StuInfo> stuList = new ArrayList<>();
        //遍历Map得到key根据key得到value
        for (String key :map.keySet()) {
            //根据key值随便获取一个list
            if ("张三".equals(key)){
               stuList = map.get(key);
            }

        }
        //我们可以在遍历他之前对他处理一下就能遍历了
       stuList = JSONObject.parseArray(stuList.toString(), StuInfo.class);
       ******2021.03.22
        //这时候我们遍历得到的list,根据老师名字过滤得到学生的信息
        List<StuInfo> list = stuList.stream().filter(stu -> {
            if ("王老师".equals(stu.getTeacher())) {
                return true;
            } else {
                return false;
            }
        }).collect(Collectors.toList());
        System.out.println(list);

    }
}

遍历的时候fastjson会出现下面这个异常.

遍历的时候出现了异常
遍历的时候出现了异常
debug调试后发现了下面这个问题

自己定义的是ArrayList类型的List对象
定义的是ArrayList类型的List
但是遍历map后得到value中的list把定义的类型转变成了JsonArray类型
发现遍历map得到list这里list的类型转变成了JsonArray类型
解决方案

我们可以在Map遍历解析得到list对象之后再进行一次解析

  //我们可以在遍历之前对他再进行一次解析就ok了
       stuList = JSONObject.parseArray(stuList.toString(), StuInfo.class);
        //这时候我们遍历得到的list,根据老师名字过滤得到学生的信息
        List<StuInfo> list = stuList.stream().filter(stu -> {
            if ("王老师".equals(stu.getTeacher())) {
                return true;
            } else {
                return false;
            }
        }).collect(Collectors.toList());
        System.out.println(list);

    }

二次解析之后发现list类型变回了ArrayList
这时候发现list类型又变成ArrayList
再次尝试遍历就可以得到自己想要的结果了
可以遍历得到自己想要的结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值