改变世界的是这样一群人,他们寻找梦想中的乐园,当他们找不到时,他们亲手创造了它

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

......


以上仅供参考

 

posted @ 2017-07-19 14:42  水狼一族  阅读(5899)  评论(2编辑  收藏  举报
改变世界的是这样一群人,他们寻找梦想中的乐园,当他们找不到时,他们亲手创造了它