业务要求,从一些指定的接口获取json,然后转成指定的 List<T>
,我写的逻辑如下:
|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| private <T> List<T> fetchData (Supplier<BaseResp<Object>> supplier, Class<T> clazz) { List<T> resultList = new ArrayList <>(); try { BaseResp<Object> response = supplier.get(); log.debug( "目标数据类型:{},数据长度:{}字符" , clazz.getSimpleName(), response.toString().length()); if (response != null && response.getData() != null ) { resultList = parseJsonArray(JSON.toJSONString(response.getData().toString(), clazz)); } } catch (Exception e) { log.error( "获取{}数据失败,原因: {}" , clazz.getSimpleName(), e.getMessage()); } return resultList; } private <T> List<T> parseJsonArray (String jsonData, Class<T> clazz) { List<T> resultList = new ArrayList <>(); try ( JSONReader reader = new JSONReader ( new StringReader (jsonData))) { reader.startArray(); while (reader.hasNext()) { try { resultList.add(reader.readObject(clazz)); } catch (Exception e) { log.warn( "解析单个数据时出错: {}" , e.getMessage()); } } reader.endArray(); } catch (Exception e) { log.error( "解析JSON数组失败: {}" , e.getMessage()); } return resultList; }
|
但是一直报错如下:
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| 2024-08-06 10:28:14.871 [scheduling-1] WARN com.kedacom.edu.component.course.he.service.SchoolCourseService - 解析单个数据时出错: syntax error, expect {, actual ident, pos 1, fastjson-version 1.2.83 2024-08-06 10:28:14.871 [scheduling-1] WARN com.kedacom.edu.component.course.he.service.SchoolCourseService - 解析单个数据时出错: syntax error, expect {, actual ident, pos 1, fastjson-version 1.2.83 2024-08-06 10:28:14.871 [scheduling-1] WARN com.kedacom.edu.component.course.he.service.SchoolCourseService - 解析单个数据时出错: syntax error, expect {, actual ident, pos 1, fastjson-version 1.2.83 2024-08-06 10:28:14.871 [scheduling-1] WARN com.kedacom.edu.component.course.he.service.SchoolCourseService - 解析单个数据时出错: syntax error, expect {, actual ident, pos 1, fastjson-version 1.2.83
|
解决方法很简单,把 response.getData().toString()
改成 JSON.toJSONString(response.getData())
即可。