记录转层级json树

根据网上一些资料整理而成。


1、树节点定义

import java.util.ArrayList;

import java.util.List;

public class TreeEntity {
    //private TreeEntity parent;            //父节点对象
    private int id;                            //节点id
    private int pid;                        //父节点id
    private Object data;                    //节点数据
    private List<TreeEntity>childs=null;    //子节点
    
    public TreeEntity(int id, int pid, Object data){
        this.id = id;
        this.pid = pid;
        this.data = data;
        this.childs = null;
    }

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    
    public int getPid() { return pid; }
    public void setPid(int pid) { this.pid = pid; }
    
    public Object getData() { return data; }
    public void setData(Object data) { this.data = data; }
    
    public List<TreeEntity> getChilds() {
        if (childs==null) childs = new ArrayList<TreeEntity>();
        return childs; }

    public void setChilds(List<TreeEntity> childs) { this.childs = childs; }

}


2、json树构建


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import hs.cdn.bean.TreeEntity;
import ms.core.tool.JsonTool;

public class JsonTree {
    
    //方法一:递归构建json树,返回的roots即为结果
    public static void buildTree(int parentId, List<TreeEntity> list, List<TreeEntity> roots){
        for(TreeEntity node: list){
            if(node.getPid()==parentId){
                roots.add(node);
                buildTree(node.getId(), list, node.getChilds());
            }
        }
    }

    private static Map<Integer,TreeEntity> listToTreeMap(List<TreeEntity> list, int root){
        //list 转 map
        Map<Integer, TreeEntity> map = new HashMap<Integer, TreeEntity>();
        for(TreeEntity node: list) {
            map.put(node.getId(), node);
        }

        Iterator<TreeEntity> iter = map.values().iterator();
        while(iter.hasNext()){
            TreeEntity node = iter.next();
            if(node.getPid()==root) continue;

            TreeEntity parentNode = map.get(node.getPid());
            if(parentNode != null){
                parentNode.getChilds().add(node);
            }
        }
 
        return map;
    }

    //方法二:借助Map完成
   public static List<TreeEntity> buildTree(List<TreeEntity> list, int root){
        if(list.size()<=0) return null;

        Map<Integer, TreeEntity> map = listToTreeMap(list, root);
        if(map.size() == 0) return null;

        List<TreeEntity> roots = new ArrayList<TreeEntity>();
        Iterator<TreeEntity> iter = map.values().iterator();

        while(iter.hasNext()){
            TreeEntity treeNode = iter.next();
            if(treeNode.getPid()==root){
                roots.add(treeNode);
            }
        }
        return roots;
    }

    public static void main(String[] args) {
        List<TreeEntity> list = new ArrayList<TreeEntity>();    //需要转换处理数据
        List<TreeEntity> rets = new ArrayList<TreeEntity>();    //返回最终结果集
        list.add(new TreeEntity(1,0,"一级目录1"));
        list.add(new TreeEntity(2,0,"一级目录2"));
        list.add(new TreeEntity(3,1,"一级目录内容:11"));
        list.add(new TreeEntity(4,0,"一级目录3"));
        list.add(new TreeEntity(5,1,"一级目录内容:12"));
        list.add(new TreeEntity(6,1,"一级目录内容:13"));
        list.add(new TreeEntity(7,2,"一级目录内容:21"));
        list.add(new TreeEntity(8,4,"一级目录内容:31"));   
        list.add(new TreeEntity(9,2,"二级目录21"));

        //method 1
        buildTree(0,list,rets);
        System.out.println(JsonTool.listBeanToJson(rets));
        
        //method 2
        List<TreeEntity> listEx = new ArrayList<TreeEntity>();    //需要转换处理数据
        listEx.add(new TreeEntity(1,0,"一级目录1"));
        listEx.add(new TreeEntity(2,0,"一级目录2"));
        listEx.add(new TreeEntity(3,1,"一级目录内容:11"));
        listEx.add(new TreeEntity(4,0,"一级目录3"));
        listEx.add(new TreeEntity(5,1,"一级目录内容:12"));
        listEx.add(new TreeEntity(6,1,"一级目录内容:13"));
        listEx.add(new TreeEntity(7,2,"一级目录内容:21"));
        listEx.add(new TreeEntity(8,4,"一级目录内容:31"));   
        listEx.add(new TreeEntity(9,2,"二级目录21"));
        List<TreeEntity> retEx = buildTree(listEx, 0);
        System.out.println(JsonTool.listBeanToJson(retEx));
    }
}

3、输出结果

[
    {
        "childs":[
            {
                "childs":[
                ],
                "data":"一级目录内容:11",
                "id":3,
                "pid":1
            },
            {
                "childs":[
                ],
                "data":"一级目录内容:12",
                "id":5,
                "pid":1
            },
            {
                "childs":[
                ],
                "data":"一级目录内容:13",
                "id":6,
                "pid":1
            }
        ],
        "data":"一级目录1",
        "id":1,
        "pid":0
    },
    {
        "childs":[
            {
                "childs":[
                ],
                "data":"一级目录内容:21",
                "id":7,
                "pid":2
            },
            {
                "childs":[
                ],
                "data":"二级目录21",
                "id":9,
                "pid":2
            }
        ],
        "data":"一级目录2",
        "id":2,
        "pid":0
    },
    {
        "childs":[
            {
                "childs":[
                ],
                "data":"一级目录内容:31",
                "id":8,
                "pid":4
            }
        ],
        "data":"一级目录3",
        "id":4,
        "pid":0
    }
]




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值