java递归实现json树结构,附带js实现树结构:子父节点
2016-08-19 15:54
2621 查看
前言
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归的缺点:
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。①百度词条--递归
1.实现效果
2.实现分析
当我们不清楚一个节点有多少个孩子的时候,得循环做查询,这里用到递归实现.用递归的时候要特别注意,递归是一定要有出口的,避免死循环.
一个简单的例子,实现n的阶乘:
我们可以清楚的看到,1.有判断条件if(n==0)来作为出口,2.方法本身调用本身.
3.java联合查询数据库的代码实现
首先,数据库查询出的结果是这样的:
emon_no是设备本身,parent_no代表他的父亲,如果parent_no没有父亲,则是-1,代表第一层节点.
我们要实现的效果是:
我们先查询第一层,就是没有父节点的设备,获取他们的编号:
然后就可以在java里递归查询子节点,封装成map格式.
孩子的查询是通过父亲的编号获得:
//传入第一级节点开始查询,直到这级节点下的孩子没有孩子.
最后用Gson的toJson(listMap)转成josn,返回给前台
前台也做递归处理,js代码如下:
最后,就达到了最开始图片的效果:
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归的缺点:
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。①百度词条--递归
1.实现效果
2.实现分析
当我们不清楚一个节点有多少个孩子的时候,得循环做查询,这里用到递归实现.用递归的时候要特别注意,递归是一定要有出口的,避免死循环.
一个简单的例子,实现n的阶乘:
public long factorial(long n){//求n! if(n==0)return 1; else return n*factorial(n-1);//利用递归n!=n*(n-1)!直到0 }
我们可以清楚的看到,1.有判断条件if(n==0)来作为出口,2.方法本身调用本身.
3.java联合查询数据库的代码实现
首先,数据库查询出的结果是这样的:
emon_no是设备本身,parent_no代表他的父亲,如果parent_no没有父亲,则是-1,代表第一层节点.
我们要实现的效果是:
我们先查询第一层,就是没有父节点的设备,获取他们的编号:
然后就可以在java里递归查询子节点,封装成map格式.
孩子的查询是通过父亲的编号获得:
//传入第一级节点开始查询,直到这级节点下的孩子没有孩子.
public List getInfoEmonChild(List<EempInfoEmon> eempInfoEmonList){ List<Map> listMap = new ArrayList(); EempInfoEmonMapper eempInfoEmonMapper = ctx.getBean(EempInfoEmonMapper.class); for(EempInfoEmon eempInfoEmon :eempInfoEmonList){ List<EempInfoEmon> InfoEmonList =eempInfoEmonMapper.resultQuality1(eempInfoEmon.getEmonNo());//把父类的编号传入,查询改父亲下的子类 Map tempMap = new HashMap(); tempMap.put("id", eempInfoEmon.getEmonNo()); tempMap.put("name", eempInfoEmon.getEmonName()); if(InfoEmonList.size()>0){//如果该设备还有孩子,继续做查询,直到设备没有孩子,也就是最后一个节点 tempMap.put("children", getInfoEmonChild(InfoEmonList)); } listMap.add(tempMap); } return listMap; }
最后用Gson的toJson(listMap)转成josn,返回给前台
前台也做递归处理,js代码如下:
//data为后台传回json数据 var tableStr; function reOrgData(data){ var orgdata = { name: data.name, id:data.id }; if(data.children && data.children.length>0){ //这里使用的就是$.extend()的嵌套多个对象的功能。 所谓嵌套多个对象,有点类似于数组的合并的操作。 $.extend(orgdata,{children:[]}); for(var i=0; i<data.children.length; i++){ var subdata = reOrgData(data.children[i]); <span style="color:#33CC00;">拼下拉选select的option,tableStr是全局变量,成功回调里用到 tableStr = tableStr + "<tr>" + "<td>"+ data.children[i].id + "</td>" + "<td>"+ data.id + "</td>" + "<td style='width:5em;'></td>" + "<td>"+ data.children[i].name + "</td>" + "<td style='width:10em;'><label class='f-orange'>正常</label><div class='uinn1 ui-btn-icon-right ui-icon-carat-r uw-app1 next'></div></td></tr>"; //把得到的subdata对象放入orgdata对象里 orgdata.children.push(subdata); } } } //成功回调函数里是这样的: success: function(data){ var dataArr=data.data; tableStr=""; if(dataArr.length>0){ $("#hint").hide(); for(var i=0;i<dataArr.length;i++){ var domMain = document.getElementById('main'+i); var datas = []; tableStr=tableStr+"<tr><td>"+dataArr[i].id+"</td><td></td>+ <td style='width:5em;'></td> <td>"+dataArr[i].name+"</td><td style='width:10em;'><label class='f-orange'>正常</label><div class='uinn1 ui-btn-icon-right ui-icon-carat-r uw-app1 next'></div></td></tr>" datas.push(reOrgData(dataArr[i])); } }else{ $("#hint").show(); } //把前面拼好的tableStr写到页面上 $("#tb").html(tableStr); createTable(); }
最后,就达到了最开始图片的效果:
相关文章推荐
- java、js中实现无限层级的树形结构(类似递归)
- java、js中实现无限层级的树形结构(类似递归)
- Java递归实现删除树形结构的任一节点
- java、js中实现无限层级的树形结构方法(类似递归)
- 递归删除树形结构的所有子节点(java和mysql实现)
- 使用递归删除树形结构的所有子节点(java和mysql实现)
- java、js中实现无限层级的树形结构(类似递归)
- Java、JS中实现无限层级的树形结构(类似递归)
- Java非递归实现多叉树型结构遍历成JSON字符串
- js 动态生成json 实现类似java map的动能
- 【数据结构与算法】汉诺塔算法——java递归实现
- iOS:二叉树多级表格的使用,使用三方库TreeTableView-master实现对json解析数据的递归遍历整理成树状结构
- React虚拟DOM具体实现——利用节点json描述还原dom结构
- JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现
- Java实现通过递归遍历树形结构
- js实现javaMap的功能 根据json的key获取json的key对应的值
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现
- java、Dom4j、循环迭代递归解析XML,不论是否是叶子节点、有复合结构
- 源代码格式化工具推荐(coolformat),可以实现c,c++,c#,java,js,json,html,sql等的格式化
- Java递归实现树状结构