展示效果
数据库展示
业务代码
/*** 省市区树*/@VLicense@ApiOperation("查询经纬度")@ApiImplicitParam(name = "FnCity", value = "省市区树", dataType = "FnCity")@GetMapping("/districtlist")public AjaxResult districtlist(){List<FnCity> list =knxDevService.fnCityList();JSONArray result = ListToTreeUtils.buildTree(JSONArray.parseArray(JSON.toJSONString(list)),"code","parentCode","children");return AjaxResult.success(result);}
转换树工具类
public class ListToTreeUtils {public static JSONArray buildTree(JSONArray arr, String id, String pid, String Chirden) {//新建一个JSONArray来接收组装成树形结构的返回值JSONArray jsonArray = new JSONArray();//新建一个JSONObject对象JSONObject hash = new JSONObject();//将数组转换为object格式for (int i = 0; i < arr.size(); i++) {//获取当前的JSON对象JSONObject json = (JSONObject) arr.get(i);//把当前id作为键,当前JSON对象作为值 put回hash这个Object对象中//这里的put方法类似于map的put方法hash.put(json.getString(id), json);}//遍历结果集for (int j = 0; j < arr.size(); j++) {//单条记录JSONObject aVal = (JSONObject) arr.get(j);//在hash中取出key为单条记录中pid的值String pidStr = "";//如果父级code不等于0if (aVal.get(pid) != "0") {pidStr = aVal.get(pid).toString();}//从hash这个对象中获取父级对象 parentcodeJSONObject hashParent = (JSONObject) hash.get(pidStr);//如果记录的parentcode存在,则说明它有父节点,将她添加到孩子节点的集合中if (hashParent != null) {//检查是否有child属性if (hashParent.get(Chirden) != null) {//有子节点 则先将子节点取出JSONArray children = (JSONArray) hashParent.get(Chirden);//然后把当前这个对象放进子节点之中children.add(aVal);//最后把子节点在放回父节点之中hashParent.put(Chirden, children);} else {//无子节点 则新建一个子节点JSONArray children = new JSONArray();//然后再把当前对象放进去children.add(aVal);//最后在放回父节点之中hashParent.put(Chirden, children);}} else {jsonArray.add(aVal);}}return jsonArray;}
}
这也是在网上找的方法,其实整个过程都是懵的,只要能用就行。