[TOC] #### 一、后台实现ApiDataConvertAdapter接口 ``` pageList为自定义的集合对象,如图一 注意:如果不需要的可以不用实现,如分页(getTotal、getCount就不用实现) ``` ``` /** * @program: jimureport-demo * @description: 编写适配器,实现ApiDataConvertAdapter * @date 2021-06-03 */ @Component("customParser") public class MyApiDataConvertAdapter implements ApiDataConvertAdapter { /** * 返回list数据集,转换成积木报表需要格式{},没有嵌套 * 注意:需要json格式,不用data包裹起来了 * @param jsonObject 接口数据原始对象 * @return */ @Override public String getData(JSONObject jsonObject) { if(jsonObject.containsKey("pagelist")){ JSONArray pageList = jsonObject.getJSONArray("pagelist"); JSONArray array = new JSONArray(); for (int i = 0; i < pageList.size(); i++) { JSONObject object = new JSONObject(); String name = pageList.getJSONObject(i).getString("name"); String id = pageList.getJSONObject(i).getString("id"); String zhicheng = pageList.getJSONObject(i).getString("zhicheng"); JSONArray fuze = pageList.getJSONObject(i).getJSONArray("fuze"); for (int j = 0; j < fuze.size(); j++) { String banji = fuze.getJSONObject(j).getString("banji"); String xueke = fuze.getJSONObject(j).getString("xueke"); object.put("name",name); object.put("id",id); object.put("zhicheng",zhicheng); object.put("banji",banji); object.put("xueke",xueke); array.add(object); } } return array.toJSONString(); }else{ return ""; } } /** * 返回links(没有图表属性可以删掉) * @param jsonObject 接口数据原始对象 * @return */ @Override public String getLinks(JSONObject jsonObject) { return jsonObject.containsKey("links") ? jsonObject.get("links").toString() : ""; } /** * 返回总页数(没有分页可以删掉) * @param jsonObject 接口数据原始对象 * @return */ @Override public String getTotal(JSONObject jsonObject) { return jsonObject.containsKey("pageNumber") ? jsonObject.get("pageNumber").toString() : "0"; } /** * 返回总条数(没有分页可以删掉) * @param jsonObject 接口数据原始对象 * @return */ @Override public String getCount(JSONObject jsonObject) { return jsonObject.containsKey("count") ? jsonObject.get("count").toString() : "0"; } } ``` ![](https://img.kancloud.cn/ec/bd/ecbd6edc2ce1edd6fc43fe4bdd30af80_1919x1079.gif =1550x) :-: 图一 #### 二、前台调用格式转换器,方便每一个api都有不同的转换器 ##### 1.api数据集中填写转换器,如图二, ##### 2.对应后台@Component括号里面的,如图三 ![](https://img.kancloud.cn/92/7b/927be36adbdcdadee31d1bcb4b4911e9_1891x420.png) :-: 图二 ![](https://img.kancloud.cn/97/b9/97b9b4ccc6f5c25568d4c748230901c8_1919x1079.gif =1550x500) :-: 图三 ##### 3.点击解析api即可 ![](https://img.kancloud.cn/f7/e1/f7e189d8b809d348f1cc992d5e6415db_1449x831.png) #### 三、注意事项 在使用这个转换器之前需要了解一个前提: **API接口返回的数据格式严格限制,必须如下:** ![](https://img.kancloud.cn/28/95/28958c771067c3224ff7cf12f301ac10_371x307.png) - total(总页数)和count(总条数)在不分页的情况下可以不提供 - data**必须**是一个数组(集合),数组的每个元素中的属性值必定为字符串或数值,即不支持嵌套对象。 > 当我们api返回的数据与积木报表不匹配的时候,那么我们就需要做一下api转换,**转换成系统可识别的数据格式**,即上述格式,本章已重写getData方法为例,具体操作步骤如下 1、返回后台接口的部分json ``` { "pagelist": [ { "zhicheng": "教师", "name": "张三", "fuze": [ { "xueke": "数学", "id": "00", "banji": "0班" }, { "xueke": "数学", "id": "01", "banji": "0班" } ] } ] } ``` 2、需要组成成最后结果的部分json ``` [ { "xueke": "数学", "zhicheng": "教师", "name": "张三", "id": "00", "banji": "0班" }, { "xueke": "数学", "zhicheng": "教师", "name": "张三", "id": "01", "banji": "0班" } ] ```