java递归算法实现拼装树形JSON数据
有时候页面需要使用jQuery easy ui中的combotree,需要给combotree提供一个JSON数据,使用如下方法(递归)实现(下面是dao层的实现层):
/**
* 根据表名和父id拼装树形JSON数据
* @param tableName
* @param parentId
* @return
* @throws Exception
*/
@Override
public String createTreeJsonBytableNameAndParentId(String tableName,String parentId) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); String sql = " select * from " + tableName + " where 1 = 1 ";
if (StringUtils.isNotEmpty(parentId)) {
sql = sql + " and parent_id = '" + parentId + "'";
}else {
sql = sql + " and parent_id is null";
}
Session session = getSession();
Query query = session.createSQLQuery(sql);
//存储过程键值对应
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map<String,String>> lists = query.list();
for (Map<String,String> msp : lists) {
map = new HashMap<String, Object>();
List<Map<String, Object>> list_children = new ArrayList<Map<String,Object>>();
String id = msp.get("id");
map.put("id",msp.get("code"));
map.put("text",msp.get("name"));
list_children = createTreeChildJson(tableName,id);
if (list_children.size()>0) {
map.put("state","closed");
map.put("children", list_children);
}
list.add(map);
}
JSONArray arry = JSONArray.fromObject(list);
return arry.toString();
} /**
* 根据表名和父id拼装树形LIST数据递归
* @param tableName
* @param parentId
* @return
* @throws Exception
*/
private List<Map<String, Object>> createTreeChildJson(String tableName,String parentId) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); String sql = " select * from " + tableName + " where 1 = 1 ";
if (StringUtils.isNotEmpty(parentId)) {
sql = sql + " and parent_id = '" + parentId + "'";
}else {
sql = sql + " and parent_id is null";
}
Session session = getSession();
Query query = session.createSQLQuery(sql);
//存储过程键值对应
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map<String,String>> lists = query.list();
for (Map<String,String> msp : lists) {
map = new HashMap<String, Object>();
List<Map<String, Object>> list_children = new ArrayList<Map<String,Object>>();
String id = msp.get("id");
map.put("id",msp.get("code"));
map.put("text",msp.get("name"));
list_children = createTreeChildJson(tableName,id);
if (list_children.size()>0) {
map.put("state","closed");
map.put("children", list_children);
}
list.add(map);
}
return list; }
拼装好的数据如下:
[
{
"id": "09DE010000",
"text": "漳卫新河",
"state": "closed",
"children": [
{
"id": "09DE010100",
"text": "四女寺减河"
},
{
"id": "09DE010200",
"text": "岔河"
},
{
"id": "09DE010300",
"text": "六五河"
}
]
},
{
"id": "09DE020000",
"text": "马颊河",
"state": "closed",
"children": [
{
"id": "09DE020100",
"text": "笃马河",
"state": "closed",
"children": [
{
"id": "09DE020101",
"text": "赵王河"
}
]
},
{
"id": "09DE020200",
"text": "二股河"
},
{
"id": "09DE020300",
"text": "朱龙河"
},
{
"id": "09DE020400",
"text": "德惠新河",
"state": "closed",
"children": [
{
"id": "09DE020401",
"text": "幸福河"
},
{
"id": "09DE020402",
"text": "商东河"
},
{
"id": "09DE020403",
"text": "临商河"
}
]
}
]
},
{
"id": "09DE030000",
"text": "沾利河"
},
{
"id": "09DE040000",
"text": "秦口河",
"state": "closed",
"children": [
{
"id": "09DE040100",
"text": "清坡河"
},
{
"id": "09DE040200",
"text": "沟盘河"
}
]
},
{
"id": "09DE050000",
"text": "徒骇河",
"state": "closed",
"children": [
{
"id": "09DE050100",
"text": "沙河"
},
{
"id": "09DE050200",
"text": "潘庄总干渠"
},
{
"id": "09DE050300",
"text": "温聪河"
},
{
"id": "09DE050400",
"text": "倪伦河"
},
{
"id": "09DE050500",
"text": "老赵牛河"
},
{
"id": "09DE050600",
"text": "赵牛河",
"state": "closed",
"children": [
{
"id": "09DE050601",
"text": "中心河"
},
{
"id": "09DE050602",
"text": "巴公河"
}
]
},
{
"id": "09DE050700",
"text": "苇河"
},
{
"id": "09DE050800",
"text": "土马河"
}
]
},
{
"id": "09DE060000",
"text": "大沙河"
},
{
"id": "09DE070000",
"text": "淄脉河"
},
{
"id": "09DE080000",
"text": "小清河",
"state": "closed",
"children": [
{
"id": "09DE080100",
"text": "杏花河"
},
{
"id": "09DE080200",
"text": "孝妇河"
},
{
"id": "09DE080300",
"text": "绣河"
},
{
"id": "09DE080400",
"text": "淄河"
}
]
},
{
"id": "09DE090000",
"text": "新塌河",
"state": "closed",
"children": [
{
"id": "09DE090100",
"text": "织女河"
},
{
"id": "09DE090200",
"text": "北阳河"
}
]
},
{
"id": "09DE100000",
"text": "弥河",
"state": "closed",
"children": [
{
"id": "09DE100100",
"text": "尧河"
}
]
},
{
"id": "09DE110000",
"text": "白浪河"
},
{
"id": "09DE120000",
"text": "虞河"
},
{
"id": "09DE130000",
"text": "潍河",
"state": "closed",
"children": [
{
"id": "09DE130100",
"text": "汶河"
},
{
"id": "09DE130200",
"text": "渠河"
}
]
},
{
"id": "09DE140000",
"text": "五龙河",
"state": "closed",
"children": [
{
"id": "09DE140100",
"text": "富水河"
},
{
"id": "09DE140200",
"text": "清水河"
},
{
"id": "09DE140300",
"text": "砚河"
}
]
},
{
"id": "09DE150000",
"text": "崂山水库"
},
{
"id": "09DE160000",
"text": "墨水河"
},
{
"id": "09DE170000",
"text": "王河"
},
{
"id": "09DE180000",
"text": "界河"
},
{
"id": "09DE190000",
"text": "黄水河",
"state": "closed",
"children": [
{
"id": "09DE190100",
"text": "内夹河"
}
]
},
{
"id": "09DE200000",
"text": "大沽夹河",
"state": "closed",
"children": [
{
"id": "09DE200100",
"text": "清阳河"
},
{
"id": "09DE200200",
"text": "门楼水库"
}
]
},
{
"id": "09DE210000",
"text": "老母猪河",
"state": "closed",
"children": [
{
"id": "09DE210100",
"text": "母猪河"
}
]
},
{
"id": "09DE220000",
"text": "黄垒河"
},
{
"id": "09DE230000",
"text": "乳山河"
},
{
"id": "09DE240000",
"text": "大沽河",
"state": "closed",
"children": [
{
"id": "09DE240100",
"text": "小沽河"
},
{
"id": "09DE240200",
"text": "五沽河"
},
{
"id": "09DE240300",
"text": "潴河"
},
{
"id": "09DE240400",
"text": "胶莱河",
"state": "closed",
"children": [
{
"id": "09DE240401",
"text": "胶河"
},
{
"id": "09DE240402",
"text": "泽河"
}
]
}
]
}
]
数据库结构如下:
第一级,parent_id为null
第二级,parent_id为第一级数据的id
第三级,parent_id为第二级数据的id
......
以上仅供参考
java递归算法实现拼装树形JSON数据的更多相关文章
- 【JSON 注解】JSON循环引用2----JSON注解@JsonIgnoreProperties+JAVA关键字transient+后台对象与JSON数据的格式互相转化
接着来说这个JSON循环引用的问题: 关于JSON格式的转化,其实关键就是这几个依赖: <!-- json --> <!-- 1号 --> <dependency> ...
- 在java中像js那样处理json数据
工作中经常需要通过ajax向前台返回json数据,都是通过拼字符串拼出来的,很发麻烦不说,还容易出错. 于是想,能不能像js那样操作json呢?或者说更方便的操作呢? Google的gson就是这样的 ...
- java android使用Gson解析泛型json数据
那就直接开始吧. 在我们获取服务器返回的json数据有时候会出现这种情况,比如: {"body":{"attrName":"feed",&q ...
- java中的lis数组转为json数据
第一个想到的办法就是 javascript中的replace 也就是先将list数组转为 字符串再对 字符串 replace 但是万万没想到javascript的replace函数在替换数据时, 默 ...
- 将相关数据拼成所需JSON数据
参考: http://www.cnblogs.com/shuilangyizu/p/6019561.html 有时候我们需要将一些数据拼装成所需要格式的JSON,可以使用如下方法,本人觉得还是比较方便 ...
- poi导出excel,表头数据动态拼装
/* * 第一步:拼装表头和数据 */ // 放多个sheet的集合 List<Map<String,Object>> datas = new ArrayList<Map ...
- Java创建和解析Json数据方法(二)——org.json包的使用
(二)org.json包的使用 1.简介 工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookie ...
- Java创建和解析Json数据方法——org.json包的使用(转)
org.json包的使用 1.简介 工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookies, ...
- Spring MVC返回Map格式JSON数据
问题描述: ajax中走error : function(e) {} 问题背景: 在测试controller层时,试过了ResponseEntity<ResponseModel>这种类型返 ...
随机推荐
- (转)rtmp协议简单解析以及用其发送h264的flv文件
Adobe公司太坑人了,官方文档公布的信息根本就不全,如果只按照他上面的写的话,是没法用的.按照文档上面的流程,server和client连接之后首先要进行握手,握手成功之后进行一些交互,其实就是交互 ...
- 数据库连接池中是将connection放进threadlocal里的
我有几点不太明白的,望各位大侠指教下.1.j2ee的应用中,有一个用户请求就会启动一个线程.而如果我们把connection放在Threadlocal里的话,那么我们的程序只需要一个connectio ...
- android基础知识普及
1.密度问题及相互转换 测试机 philips w732 480X800 density 1.5 scaledDensity 1.6500001 通过 context.getResources().g ...
- Android RecyclerView (一) 使用完全解析
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45059587: 本文出自:[张鸿洋的博客] 概述 RecyclerView出现 ...
- ffmpeg中的sws_scale算法性能对比
sws_scale的算法有如下这些选择. #define SWS_FAST_BILINEAR 1#define SWS_BILINEAR 2#define SWS_BICUBIC 4#define S ...
- html端编码规范
理想的方式是让HTML只用于定义内容呈现的结构,让CSS控制内容呈现的样式,而所有功能的实现定义在JavaScript中
- Python学习(九)IO 编程 —— 文件读写
Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...
- 20.custom自定义线程池
自定义线程池 1.若Executors工厂类无法满足需求,可以自己使用工厂类创建线程池,底层都是使用了); ThreadPoolExecutor threadPoolExecutor = new Th ...
- 零基础学python-3.5 内存管理
* 变量无需事先声明 * 变量无需指定类型 * 程序猿不用关系内存管理 * 变量名会被回收 * del能够直接释放资源 1.python使用的是引用调用,而不是值调用,他使用的回收算法是引用计数算法, ...
- ownCloud 的六大神奇用法
ownCloud 是一个自行托管的开源文件同步和共享服务器.就像“行业老大” Dropbox.Google Drive.Box 和其他的同类服务一样,ownCloud 也可以让你访问自己的文件.日历. ...