野生猿 2019-09-19 19:20 采纳率: 100%
浏览 1328
已采纳

java中查询部门表,转换为树形json

java中查询部门表,转换为树形json,最终需要使用Dtree 在前端展示树形结构

数据结构如下图

图片说明

不管用什么方式,最终希望得到json格式为:

{
    "id": "1",
    "name": "GM",
    "Children": [{
            "id": "22",
            "name": "PM",
            "Children": [{
                "id": "67",
                "name": "MO",
                "Children": [{}]
            }]
        },

        {
            "id": "23",
            "name": "PD",
            "Children": [{}]
        },
        {
            "id": "24",
            "name": "PE",
            "Children": [{}]
        }
    ]
 }

求大神指点

  • 写回答

7条回答 默认 最新

  • Kevin.Y.K 2019-09-20 10:59
    关注

    部门类

    public class Department {
    
        private String id;
    
        private String name;
    
        private String pid;
    
        public Department(String id, String name, String pid) {
            super();
            this.id = id;
            this.name = name;
            this.pid = pid;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPid() {
            return pid;
        }
    
        public void setPid(String pid) {
            this.pid = pid;
        }
    }
    

    节点类

    package com.kevin;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TreeNode   implements Serializable{
    
        private String id;
    
        private String name;
    
        private List<TreeNode> children=new ArrayList<TreeNode>();
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public List<TreeNode> getChildren() {
            return children;
        }
    
        public void setChildren(List<TreeNode> children) {
            this.children = children;
        }
    
    
    }
    
    

    生成过程

    public static void main(String[] args) {
    
            List<Department> dList = new ArrayList<>();
    
            dList.add(new Department("1","GM","0"));
            dList.add(new Department("22","PM","1"));
            dList.add(new Department("21","R7D","1"));
            dList.add(new Department("27","STD","21"));
    
            Map<String, List<TreeNode>> map=new HashMap<String, List<TreeNode>>();
            TreeNode node=null;
            Set<String> idSet=new HashSet<>();
            for (Department department : dList) {
                if(!idSet.contains(department.getId())) {
                    node = new TreeNode();
                    node.setId(department.getId());
                    node.setName(department.getName());
    
                    if(map.get(department.getPid())==null) {
                        map.put(department.getPid(), new ArrayList<>());
                    }
    
                    map.get(department.getPid()).add(node);
    
                    idSet.add(department.getId());
                }
            }
    
            Iterator<String> it=map.keySet().iterator();
            String id=null;
            while(it.hasNext()) {
                id = it.next();
                List<TreeNode> childeNodes=map.get(id);
                for (TreeNode treeNode : childeNodes) {
                    if(map.get(treeNode.getId())!=null) {
                        treeNode.getChildren().addAll(map.get(treeNode.getId()));
                    }
                }
            }
    
            //System.out.println(map.get("0").toString());
            System.out.println(JSONObject.toJSON(map.get("0")));
    
        }
    

    测试结果

    [
        {
            "children":[
                {
                    "children":[
    
                    ],
                    "name":"PM",
                    "id":"22"
                },
                {
                    "children":[
                        {
                            "children":[
    
                            ],
                            "name":"STD",
                            "id":"27"
                        }
                    ],
                    "name":"R7D",
                    "id":"21"
                }
            ],
            "name":"GM",
            "id":"1"
        }
    ]
    

    些许不一样,按需参考

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料