用List构建带有层次结构的json数据

    在我的上一篇文章中讲述了如何以Oracle数据表和递归子查询构建多叉树以及如何查询(地址为 http://blog.csdn.net/hellowordapi/article/details/75763432), 但是在我们查询出来后要把逻辑上抽象的树转换成带有层级数据的json结构,这样才能够在前端插件如Ztree或自己写的左侧栏中渲染完成业务需求。 下面是把数据库中的数据转成带有层次结构的代码。

  需要引入的jar包maven地址为(也可以不引用只是博主喜欢了用Guava):

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>
如果不引入瓜娃,只需要把Lists.newArrayList(); 改为jdk实例化List的方式即可。


实体类:

import com.google.common.collect.Lists;

import net.sf.json.JSONObject;

/**
 *  
 * @author zhoujie
 *
 */
public class SidebarTree {
      private String url;
      private String urlname;
      private String id;  //节点
      private String parent; //父节点
      private JSONObject attributes = new JSONObject();   //net.sf.json
      private List<SidebarTree> children= Lists.newArrayList(); //存放子节点
     //get set 
}


核心类:

public class TreeTest {
	public static List<SidebarTree> formatTree(List<SidebarTree> list ){
		SidebarTree root=new SidebarTree();
		SidebarTree node=new SidebarTree();
		List<SidebarTree> treelist=Lists.newArrayList(); //拼凑好的Json数据
		List<SidebarTree> parentNodes=Lists.newArrayList(); // 存放所有父节点
		
	     if(list!=null && list.size()>0){
	             root=list.get(0); //第一个一定是根节点 0
	             
	           for(int i=1; i<list.size(); i++){
	        	   node=list.get(i);
	        	   if(node.getParent().equals(root.getId())){ //从跟节点开始遍历是不是子节点
	 
	        		   parentNodes.add(node);
	        		   root.getChildren().add(node);
	        	   
	        	   }else{ //获取root子节点的孩子节点
	        		    getChildrenNodes(parentNodes, node); 
	 
	        		    parentNodes.add(node);
	        	   }
	           }  
	     }
	     treelist.add(root);

	     return treelist;
	     
	     }
	
	private static void getChildrenNodes(List<SidebarTree> parentNodes , SidebarTree node){
		 for(int i=parentNodes.size()-1; i>=0; i--){
			  SidebarTree pnode=parentNodes.get(i);
			  
			  if(pnode.getId().equals(node.getParent())){
				  pnode.getChildren().add(node);
				  return;
			  }

			 
		 }
	}
}


最终json格式:

[
    {
        "url": "*",
        "urlname": "系统管理",
        "id": "1",
        "parent": "0",
        "attributes": {},
        "children": [
            {
                "url": "*",
                "urlname": "权限管理",
                "id": "2",
                "parent": "1",
                "attributes": {},
                "children": [
                    {
                        "url": "/permission/index",
                        "urlname": "权限列表",
                        "id": "4",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/addPermission.shtml",
                        "urlname": "权限添加",
                        "id": "6",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/deletePermissionById",
                        "urlname": "权限删除",
                        "id": "7",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/addPermission2Role",
                        "urlname": "权限分配",
                        "id": "13",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/allocation",
                        "urlname": "权限分配2",
                        "id": "19",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    }
                ]
            },
            {
                "url": "*",
                "urlname": "用户管理",
                "id": "22",
                "parent": "1",
                "attributes": {},
                "children": [
                    {
                        "url": "/member/list.shtml",
                        "urlname": "用户列表",
                        "id": "8",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/online.shtml",
                        "urlname": "在线用户",
                        "id": "9",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/changeSessionStatus",
                        "urlname": "用户Session踢出",
                        "id": "10",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/forbidUserById",
                        "urlname": "用户激活or禁止",
                        "id": "11",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/deleteUserById",
                        "urlname": "用户删除",
                        "id": "12",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    }
                ]
            },
            {
                "url": "*",
                "urlname": "角色管理",
                "id": "23",
                "parent": "1",
                "attributes": {},
                "children": [
                    {
                        "url": "/role/clearRoleByUserIds",
                        "urlname": "用户角色分配清空",
                        "id": "14",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/addRole2User",
                        "urlname": "角色分配保存",
                        "id": "15",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/deleteRoleById.shtml",
                        "urlname": "角色列表删除",
                        "id": "16",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/addRole",
                        "urlname": "角色列表添加",
                        "id": "17",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "role/index",
                        "urlname": "角色列表",
                        "id": "18",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/allocation",
                        "urlname": "角色分配",
                        "id": "20",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    }
                ]
            }
        ]
    }
]




  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值