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>这种类型返 ...
随机推荐
- Ubuntu删除文件夹的命令
1. 删除文件夹的内容包括文件夹: rm -rf 文件夹的名字 (-r 是 循环的意思, f是不询问的意思) 2 .删除文件夹的内容不包括文件夹: rm -rf 文件夹的名字/* ...
- ubuntu 设置静态IP GW
网卡配置静态IP地址 编辑文件/etc/network/interfaces: sudo vi /etc/network/interfaces 并用下面的行来替换有关eth0的行:# The prim ...
- plsql只有注释显示问号,其余中文可以正常显示
在plsql客户端查看表信息,注释均为乱码,使用select 查询字段中中文字符正常,以下为解决方案: 1.使用语句 select * from V$NLS_PARAMETERS 查询 nls_lan ...
- Django的restful api自动生成工具django-rest-swagger介绍
源码位置:https://github.com/marcgibbons/django-rest-swagger 文档位置:https://marcgibbons.com/django-rest-swa ...
- vim配置总结
本博文转自:http://www.cppblog.com/runsisi/archive/2013/04/06/199152.html? opt=admin 12年的最后一天配置了一下公司RHEL上的 ...
- axure 6.5 汉化正式版软件及注册码
Axure公司发布了Axure RP 6.5 正式版. 官方主页: http://www.axure.com/news 官方下载: http://www.axure.com/download 视频介绍 ...
- 如何获取Android唯一标识(唯一序列号)
有很多场景和需求你需要用到手机设备的唯一标识符. 在Android中,有以下几种方法获取这样的ID. 1. The IMEI: 仅仅只对Android手机有效: 1 2 TelephonyManage ...
- Qt 串口类QSerialPort 使用笔记
Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...
- Fragment 创建 传递参数 跳转【典例】
Fragment一定要有一个无参的构造方法! 因为当Activity因屏幕旋转或者因内存不足被系统杀死时,会导致Activity被重新创建,而当Activity被重建时,FragmentManager ...
- 领扣-121/122/123/188 最佳买卖时机 Best Time to Buy and Sell MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...