> 当我们api返回的数据与积木报表不匹配的时候,那么我们就需要做一下api转换,本章已重写getData方法为例,具体操作步骤如下 1、返回后台接口的部分json ![](https://img.kancloud.cn/ad/6d/ad6df41523f196b4b98e4c29a3ab3474_1550x532.png) 2、需要组成成最后结果的部分json ![](https://img.kancloud.cn/c6/ff/c6ffc4715b7360e4ab1d2a59ed49db53_1122x621.png) #### 一、后台实现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)