java 菜单 json_Java数据库菜单形成jsontree

分享一个工具类

/**

* Json字符串工具类

*

* @author yanwei

* remind:所有顶级菜单的pid为0才能正常迭代出对应的树

*/

public class JsonTree {

/**

* 根据id,pid和树要显示的属性生成树的Json字符串 ,字符串没有中括号,因为牵扯递归调用,不方便处理

*

* @param

* @param objs

* @param pidAttr

* @param idAttr

* @return

* @throws Exception

*/

public static String treeJson(long pid , List objs, StringBuilder builder, String pidAttr,

String idAttr,String name) throws Exception {

if (objs.size() == 0){

return "{\"children\":[]}";

}

for(Iterator iter = objs.iterator(); iter.hasNext();) {

T t = iter.next();

long id = getLong(t, idAttr);

long temp_pid = getLong(t, pidAttr);

String label = getValue(t, name);

if(pid == Long.MAX_VALUE){

break;

}

if(temp_pid == pid){

builder.append("{\"id\":\"").append(id).append("\",");

builder.append("\"name\":\"").append(label).append("\",");

if(isHasChildren(id, objs, pidAttr)) {

builder.append("\"children\":[");

treeJson(id, objs, builder, pidAttr, idAttr,name);

builder.append("]},");

}else{

builder.append("\"children\":[");

builder.append("],");

builder.deleteCharAt(builder.length() - 1).append("},");

}

}

}

if(builder.length()>=1){

builder.deleteCharAt(builder.length() - 1);

}

return builder.toString();

}

}

// 该方法给定一个id,一个list,判断是否包含子节点

private static boolean isHasChildren(long id , List objs, String pidAttr) throws Exception{

for(T t : objs){

long pid = getLong(t, pidAttr);

if(pid == id){

return true;

}

}

return false;

}

//利用反射,执行对象的方法,获取值

private static long getLong(T t, String attrName) throws Exception {

Field field = t.getClass().getDeclaredField(attrName);

if (!field.isAccessible()) {

field.setAccessible(true);

}

Object value = field.get(t);

if (value == null){

return Long.MAX_VALUE;

}else{

return Long.parseLong(value.toString());

}

}

//获取属性值,一般属性

private static String getValue(T t, String attrName) throws Exception {

Field field = t.getClass().getDeclaredField(attrName);

if (!field.isAccessible()) {

field.setAccessible(true);

}

Object value = field.get(t);

if (value == null){

return "\"\"";

}else{

return value.toString();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值