zoukankan      html  css  js  c++  java
  • 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

    ......


    以上仅供参考

  • 相关阅读:
    job_queue_processes参数讲解
    Oracle trunc()函数的用法
    JSON字符串转JavaBean,net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ……
    javax.swing.JList 设置分割线
    清除SVN版本控制文件
    MyEclipse SVN安装方法
    ExtJs xtype类型介绍
    Android中的“再按一次返回键退出程序”实现
    Android之NetworkOnMainThreadException异常
    HDU 3613 Best Reward
  • 原文地址:https://www.cnblogs.com/shuilangyizu/p/7205710.html
Copyright © 2011-2022 走看看