展示效果
数据库展示
业务代码
/**
* 省市区树
*/
@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不等于0
if (aVal.get(pid) != "0") {
pidStr = aVal.get(pid).toString();
}
//从hash这个对象中获取父级对象 parentcode
JSONObject 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;
}
}
这也是在网上找的方法,其实整个过程都是懵的,只要能用就行。