直接上图
解析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对象
但是遍历map后得到value中的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
再次尝试遍历就可以得到自己想要的结果了