zoukankan      html  css  js  c++  java
  • 树形菜单的json字符串的拼接

    最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用js来遍历组成这个json字符串, 很好! 但是没看懂...

        var data = [
            {"id":1,"parendId":0,"name":"Foods"},
            {"id":2,"parentId":1,"name":"Fruits"},
            {"id":3,"parentId":1,"name":"Vegetables"},
            {"id":4,"parentId":2,"name":"apple"},
            {"id":5,"parentId":2,"name":"orange"},
            {"id":6,"parentId":3,"name":"tomato"},
            {"id":7,"parentId":3,"name":"carrot"},
            {"id":8,"parentId":3,"name":"cabbage"},
            {"id":9,"parentId":3,"name":"potato"},
            {"id":10,"parentId":3,"name":"lettuce"}
        ];
    
    
        function exists(rows, parentId){
            for(var i=0; i<rows.length; i++){
                if (rows[i].id == parentId) {
                    return true;
                }
            }
            return false;
        }
    
        function convert(rows){
            var nodes = [];
            //取到第一级菜单
            for(var i=0; i<rows.length; i++){
                var row = rows[i];
                if (!exists(rows, row.parentId)){
                    nodes.push({
                        id:row.id,
                        text:row.name
                    });
                }
            }
    
            var toDo = [];
            for(var i=0; i<nodes.length; i++){
                toDo.push(nodes[i]);
            }
            while(toDo.length){
                var node = toDo.shift();    // the parent node
                //取得子菜单
                for(var i=0; i<rows.length; i++){
                    var row = rows[i];
                    if (row.parentId == node.id){
                        var child = {id:row.id,text:row.name};
                        if (node.children){
                            node.children.push(child);
                        } else {
                            node.children = [child];
                        }
                        toDo.push(child);
                    }
                }
            }
            return nodes;
        }
    
        var data1 = convert(data);
    
        $('#tt').tree({
            data:data1
        });

    下面是从后台拼接字符串

    贴在这里从后台实现的方法不是一种可取的办法, 是利用多次从数据库取出数据进行拼接, 最后也能实现效果, 只是这个数据量太小了, 如果是企业里比较大型的项目, 这样会占用不少电脑的性能, 从网上找的那些基本没看懂

    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.sql.Connection;
    /** * @author 25673 * @数据库连接类 */ public class ConnectionUtil { public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); //"jdbc:mysql://数据库地址:3306/数据库名","用户名","用户密码" conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/quanxian","root",""); } catch (Exception e) { e.printStackTrace(); } return conn; } public static ArrayList<Menu> findMenu(String parentid) { String sql = "select * from sys_menu where parent_id = '"+parentid+"'"; Connection c = null; Statement s = null; ResultSet r = null; ArrayList<Menu> arrList = null; c = getConnection(); try { s = c.createStatement(); r = s.executeQuery(sql); arrList = new ArrayList<Menu>(); while(r.next()) { Menu menu = new Menu(); menu.setId(r.getString("id")); menu.setParentid(r.getString("parent_id")); menu.setMenuName(r.getString("menu_name")); arrList.add(menu); } } catch (Exception e) { e.printStackTrace(); } finally { try { c.close(); s.close(); r.close(); } catch (Exception e) { e.printStackTrace(); } } return arrList; } /** * @param arrList 查询出来的所有符合条件的结果 * @param parentid 第一级菜单的parentid * @return */ public static String strJson(String parentid) { /* 每调用一次这个方法, 就要去连接一次数据库, 总觉这样会增加很多工作量, 因为是进行了多次查询
    这里使用了递归的方式
    */ ArrayList<Menu> arrList = findMenu(parentid); StringBuilder sb = new StringBuilder(); for(int n = 0;n < arrList.size();n++) { sb.append("{"); sb.append(""id":""+arrList.get(n).getId()+"","); sb.append(""text":""+arrList.get(n).getMenuName()+"""); String str = strJson(arrList.get(n).getId()); if(!str.equals("")) { sb.append(","state":"closed""); sb.append(","children":["+str+"]"); } sb.append("}"); if(n < (arrList.size() - 1)) { sb.append(","); } } return sb.toString(); } }

    还在继续思考怎么从后台一次性查出所有的信息, 直接用拼接的方式组成这个字符串, 希望能有人指点一下, 谢谢

  • 相关阅读:
    一款漂亮的表格样式(简约版)
    性能测试工具 Jmeter GET 请求 参数为 Json 串且参数中存在变量的转化
    _groovy
    Linux SElinux
    Jmeter-后置处理器(Json extractor)
    jmeter处理接口加密和解密
    nmon内存分析
    jmeter 非GUI执行测试,没有响应数据保存到jtl文件办法
    如何隐藏电脑里的文件或者文件夹
    详解JMeter函数和变量
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/5900533.html
Copyright © 2011-2022 走看看