在不知道根节点的情况下生成树形结构 (采用JSONObject)
废话不多说直接上代码
/*** * 生成树形结构 在不知道跟节点的情况下* @param list 源数据* @param nodeList 跟节点数据* @param childName 子节点名称* @param key 节点key* @param up_key 上级节点key* @param child_level 节点级别 1,2,3...* @return*/public static JSONArray recursionCreateArrayNotRoot(JSONArray list, JSONArray nodeList, String childName, String key, String up_key, int child_level) {if (nodeList == null) {//跟节点为空的情况下 ,遍历查询跟节点nodeList = new JSONArray();//作为跟节点的存在for (int i = 0; i < list.size(); i++) {boolean mark = false;JSONObject n = list.getJSONObject(i);for (int j = 0; j < list.size(); j++) {JSONObject m = list.getJSONObject(j);if (n.optString(up_key).equals(m.optString(key))) {mark = true;break;}}if (!mark) {n.put("child_level", child_level);nodeList.add(n);//添加的是没有上级的}}list.removeAll(nodeList);//将根节点移除出列表}//为根节点寻找下级for (int i = 0; i < nodeList.size(); i++) {JSONObject n = nodeList.getJSONObject(i);JSONArray child = n.optJSONArray(childName);if (child == null) {child = new JSONArray();}for (int j = 0; j < list.size(); j++) {JSONObject m = list.getJSONObject(j);m.put("child_level", child_level + 1);if (n.optString(key).equals(m.optString(up_key))) {child.add(m);}}n.put(childName, child);list.removeAll(child);//跟节点的下级找到后移除列表recursionCreateArrayNotRoot(list, n.optJSONArray(childName), childName, key, up_key, child_level + 1);//不断的寻找下级}return nodeList;}
复制代码
理论上这个方法可以通用,不管你们定义的关键字是什么都可以使用
调用方法 JSONArray result = jJson.recursionCreateArrayNotRoot(array, null, "child","org_key", "up_org_key", 1);
复制代码
原始数据
[
{"org_key":"2001","up_org_key":"0","usr_org_key":"1001","usr_org_name":"光明城","user_org_code":"10","boss_id":"10010","org_name":"光明城1","org_code":"12","area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw","org_level":"1","area_name":"虎邱村"
},
{"org_key":"2002","up_org_key":"2001","usr_org_key":"1002","usr_org_name":"晋安区","user_org_code":"10-0001","boss_id":"10010","org_name":"晋安区","org_code":"12-1","area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw","org_level":"2","area_name":"虎邱村"
},
{"org_key":"2003","up_org_key":"0","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"鼓楼区","org_code":"11","area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw","org_level":"1","area_name":"虎邱村"
},
{"org_key":"org_fTZXL9Vea8mLlxVCeGEWbFr4cQHQDQhZ","up_org_key":"2001","usr_org_key":"org_iU57sIDvHmM6LljFPSZbgNVieVhjKyBQ","usr_org_name":"福州测试小区","user_org_code":"10-0003","boss_id":"10010","org_name":"福州测试小区","org_code":"12-2","area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL","org_level":"2","area_name":"文楼村"
},
{"org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm","up_org_key":"2001","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"花园小区","org_code":"12-5","area_key":"IfwmlJrHl6137YZ7FvmcW1QjlNYoGWkS","org_level":"2","area_name":"福耀社区"
},
{"org_key":"org_fx5fjorqBRWJgWR4CxMx3Wquq0CimhnE","up_org_key":"2003","usr_org_key":"org_HHsupVt4HPzfcpSZShchbLivotsVdaFK","usr_org_name":"大儒世家","user_org_code":"003","boss_id":"10010","org_name":"五凤街道","org_code":"11-1","area_key":"DxeRGfT5mP2tq1Yw4b7hqzDckZiL2T9W","org_level":"2","area_name":"福和社区"
},
{"org_key":"org_gG6L68Wt0zjmCxp0dIWM0XKDCToyFndZ","up_org_key":"org_gG6L68Wt0zjmCxp0dIWM0XKDCToyFndZ","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"部门A","org_code":"001","area_key":"vI59WqwHEDLvdyc3SI2Z0p1u8ZQl6dvl","org_level":"2","area_name":"柏渡村"
},
{"org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C","up_org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm","usr_org_key":"org_EdLEdVgGciifkYeRmluNawW6Tjgxq4Fu","usr_org_name":"西洪小区","user_org_code":"0021","boss_id":"10010","org_name":"区委会","org_code":"12-5-1","area_key":"pMhxXlafOcYeQ0vNWf3nz1tIdwvS0JdN","org_level":"3","area_name":"玉峰村"
},
{"org_key":"org_hCtV75g3cB6bBqJHarfRvKwG1YjEKwwX","up_org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"某某部门","org_code":"12-5-1-1","area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL","org_level":"4","area_name":"文楼村"
}
复制代码
]
生成后的数据
[
{"org_key":"2001","up_org_key":"0","usr_org_key":"1001","usr_org_name":"光明城","user_org_code":"10","boss_id":"10010","org_name":"光明城1","org_code":"12","area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw","org_level":"1","area_name":"虎邱村","child_level":1,"child":[{"org_key":"2002","up_org_key":"2001","usr_org_key":"1002","usr_org_name":"晋安区","user_org_code":"10-0001","boss_id":"10010","org_name":"晋安区","org_code":"12-1","area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw","org_level":"2","area_name":"虎邱村","child_level":2,"child":[]},{"org_key":"org_fTZXL9Vea8mLlxVCeGEWbFr4cQHQDQhZ","up_org_key":"2001","usr_org_key":"org_iU57sIDvHmM6LljFPSZbgNVieVhjKyBQ","usr_org_name":"福州测试小区","user_org_code":"10-0003","boss_id":"10010","org_name":"福州测试小区","org_code":"12-2","area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL","org_level":"2","area_name":"文楼村","child_level":2,"child":[]},{"org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm","up_org_key":"2001","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"花园小区","org_code":"12-5","area_key":"IfwmlJrHl6137YZ7FvmcW1QjlNYoGWkS","org_level":"2","area_name":"福耀社区","child_level":2,"child":[{"org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C","up_org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm","usr_org_key":"org_EdLEdVgGciifkYeRmluNawW6Tjgxq4Fu","usr_org_name":"西洪小区","user_org_code":"0021","boss_id":"10010","org_name":"区委会","org_code":"12-5-1","area_key":"pMhxXlafOcYeQ0vNWf3nz1tIdwvS0JdN","org_level":"3","area_name":"玉峰村","child_level":3,"child":[{"org_key":"org_hCtV75g3cB6bBqJHarfRvKwG1YjEKwwX","up_org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"某某部门","org_code":"12-5-1-1","area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL","org_level":"4","area_name":"文楼村","child_level":4,"child":[]}]}]}]
},
{"org_key":"2003","up_org_key":"0","usr_org_key":"","usr_org_name":"","user_org_code":"","boss_id":"10010","org_name":"鼓楼区","org_code":"11","area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw","org_level":"1","area_name":"虎邱村","child_level":1,"child":[{"org_key":"org_fx5fjorqBRWJgWR4CxMx3Wquq0CimhnE","up_org_key":"2003","usr_org_key":"org_HHsupVt4HPzfcpSZShchbLivotsVdaFK","usr_org_name":"大儒世家","user_org_code":"003","boss_id":"10010","org_name":"五凤街道","org_code":"11-1","area_key":"DxeRGfT5mP2tq1Yw4b7hqzDckZiL2T9W","org_level":"2","area_name":"福和社区","child_level":2,"child":[]}]
}
复制代码
]
转载于:https://juejin.im/post/5cad58bee51d456e5633ddaa
在不知道根节点的情况下生成树形结构 (采用JSONObject)相关推荐
- 在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据
我需要在php中读取firebase JSON URL然后显示它. 我的firebase得到了以下.json数据: {"dDsdE4AlB7P5YYd4fWbYTQKCLPh1": ...
- java 生成树形结构_java 生成树形结构(极速版)
树形结构是非常常见的数据结构,生成树形结构的方法比较常见的有递归,for循环,不管使用什么方法,如果能很好地利用内存来合理地添加树节点,则能极大提高效率 测试代码如下: public class Te ...
- 利用Stram来递归生成树形结构
利用Stram来递归生成树形结构 当需要查询有子菜单,或者子部门这一类需要形成树形的数据时,我们可以使用stream流式编程写 实体类 实体类需要有一个子列,类似此处的子城市 @Data @Equal ...
- html2canvas如何在元素隐藏的情况下生成截图
html2canvas官网地址:http://html2canvas.hertzen.com/ github地址:https://github.com/niklasvh/html2canvas/ 从官 ...
- 在高并发分布式情况下生成唯一标识id
做项目的时候经常会用id作为唯一标识. 但是当有这样一个需求出现的时候:工程分布式部署,要求抗住高并发.并且生成的id是根据时间自增的.解决这个问题有很多种方法,但是要选择一个性价比比较高的策略比较不 ...
- mysql关系型数据库生成树形结构,Layui页面渲染树型结构图(详细)
文章目录 一.学使用DTree 上代码(详细说明注释见) 引入结构 说明 dataFormat:"list" 二.使用MySQL查询结果 说明 三.效果展示 总结 # 前言 项目使 ...
- java项目中表格导入找到最近父类生成树形结构
业务场景:xlsx表格当中有5个层级,在导入项目中时要确保页面展示的结构为树形,但是有一些的零部件从属(父类编号)是一样的,这样就给导入表格的程序导致分别不出有一些的零部件是在哪一级的父类下面,所以导 ...
- 如何在不安装 Microsoft Office 的情况下生成 Excel 文件?
咨询区 mistrmark: 我的一个项目中有导出 excel 的功能,但我发现运行代码的机器上一定要安装 Excel,否则就找不到 Microsoft.Office.Interop.Excel ,导 ...
- python怎么生成不重复的字符_如何在不重复的情况下生成一组字符的所有组合?...
我有以下清单:['a', 'b', 'c'] 我正在寻找一种方法来生成所有可能的字符串,这些字符串包含以下限制:一个字符不能出现多次(aab,aba,abca等无效) 可以排除字符(ab有效,即使c不 ...
最新文章
- 升级Firefox8后watir-webdriver出现错误“unable to obtain stable firefox connection in 60 seconds”...
- 选择排序的思想及其实现
- 0709-To Lower Case(转换成小写字母)
- R语言观察日志(part14)--R语言杂记
- python文件目录操作方法_Python常用的文件及文件路径、目录操作方法汇总介绍
- .NET基金会讨论 .NET 开源事业之路
- 在Angular 8中使用自定义MultiSelect下拉菜单创建动态行
- 循序渐进之Spring AOP(2) - 基本概念
- 网络安全实验室CTF—基础关 writeup
- 电脑pdf截长图滚动截图保存图片
- LQR 控制学习-LQR控制 MATLAB官方教程-LQR 控制器_状态空间系统Matlab/Simulink建模分析
- FileZilla Server 中文版使用教程
- AXure交互设计指南
- Touch 电容式触摸按键 触摸按键PCB设计参考
- 编程向未来---启程
- 由火车上的查票事件所引起的思考
- BZOJ---4484:[Jsoi2015]最小表示【bitset】
- cad面积累计lisp怎么用_CAD增强的填充面积统计插件LISP源码
- 风电齿轮箱在线监测方案
- 当V4L2遇上Gstreamer