用List构建带有层次结构的json数据
来源:互联网 发布:linux 启动文件丢失 编辑:程序博客网 时间:2024/05/22 13:41
在我的上一篇文章中讲述了如何以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 0
- 用List构建带有层次结构的json数据
- json转义内容带有引号的数据
- 利用多叉树将数据库中的层次数据转换成树形结构的JSON字符串
- 带有JSON数据的多部分请求----multipart/json
- 带有层次关系的css
- c json处理器的结构层次太多~~ 需要重构
- Javascript--父子数据层次结构和平行结构的转换
- springMVC解析带有中文字符的json数据异常
- Gson 解析Json结构,泛型转为List 集合会出现擦除数据的情况
- 用 SQL 查询/构建树型(层次)数据
- (C++)带有元数据信息的结构体
- Android之JSON数据的构建
- 关于WebUI中WebGrid的层次结构,代码绑定数据
- 构建数据库数据的树状结构
- 构建数据库数据的树状结构
- 构建数据库数据的树状结构
- 构建数据库数据的树状结构
- 构建数据库数据的树状结构
- CODEVS 1743(伸展树区间翻转)
- C/C++笔试题
- 面试简记(2017/7/24)
- git查看某个文件的修改历史
- POJ
- 用List构建带有层次结构的json数据
- Html5第十课时,年龄成绩判断
- 如此让人放弃的面向对象三大特征——看完就搞定
- 51nod--1088 最长回文子串(连续!)
- Java 调用 C#
- 卸载opencv-2.4.10
- poj-2142-
- 链表翻转。给出一个链表和一个数K,按照分组逆置。
- hash 模板