package com.glodon.safety.contingency.job; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.*; /** * @Description 通用的list转json tree的工具类 * @Author songwp * @Date 2022/12/30 12:59 * @Version 1.0.0 **/ public class CommonTreeUtil { /** - listToTree - <p>方法说明<p> - 将JSONArray数组转为树状结构 - @param arr 需要转化的数据 - @param id 数据唯一的标识键值 - @param pid 父id唯一标识键值 - @param child 子节点键值 - @return JSONArray */ public static JSONArray listToTree(JSONArray arr, String id, String pid, String child){ JSONArray r = new JSONArray(); JSONObject hash = new JSONObject(); //将数组转为Object的形式,key为数组中的id for(int i=0;i<arr.size();i++){ JSONObject json = (JSONObject) arr.get(i); hash.put(json.getString(id), json); } //遍历结果集 for(int j=0;j<arr.size();j++){ //单条记录 JSONObject aVal = (JSONObject) arr.get(j); //在hash中取出key为单条记录中pid的值 JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString()); //如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中 if(hashVP!=null){ //检查是否有child属性 if(hashVP.get(child)!=null){ JSONArray ch = (JSONArray) hashVP.get(child); ch.add(aVal); hashVP.put(child, ch); }else{ JSONArray ch = new JSONArray(); ch.add(aVal); hashVP.put(child, ch); } }else{ r.add(aVal); } } return r; } public static void main(String[] args) { Map map = new HashMap(); map.put("id","1"); map.put("parentId","0"); map.put("name","陕西省"); Map map1 = new HashMap(); map1.put("id","2"); map1.put("parentId","1"); map1.put("name","西安市"); Map map2 = new HashMap(); map2.put("id","3"); map2.put("parentId","2"); map2.put("name","雁塔区"); Map map3 = new HashMap(); map3.put("id","4"); map3.put("parentId","1"); map3.put("name","咸阳市"); List<Map> mapList = Arrays.asList(map, map1, map2, map3); JSONArray result = CommonTreeUtil.listToTree(JSONArray.parseArray(JSON.toJSONString(mapList)),"id","parentId","children"); System.out.println(result); } }
控制台输出:
[ { "children":[ { "children":[ { "name":"雁塔区", "id":"3", "parentId":"2" } ], "name":"西安市", "id":"2", "parentId":"1" }, { "name":"咸阳市", "id":"4", "parentId":"1" } ], "name":"陕西省", "id":"1", "parentId":"0" } ]标签:name,JSONArray,tree,list,param,json,parentId,import,id From: https://www.cnblogs.com/songweipeng/p/17014687.html