最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用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();
}
}

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

树形菜单的json字符串的拼接的更多相关文章

  1. json字符串的拼接

    关于json字符串的解析与拼接,第一次接触,留下个笔记了.......解析,是改的代码,拼接是纯的,解析就不说了,笔记一下拼接了 关于解析主要分三部分,一个是第一层处理,一个是第二层处理,一个是进行& ...

  2. 生成树形结构的json字符串代码(c#)供前端angular tree使用.

    框架是使用EF6.0.可以针对返回的值使用Newtonsoft.Json.dll(百度搜一下)来对返回的值序列化为json字符串,如果对以下值那就是使用JsonConvert.SerializeObj ...

  3. 更新操作 关于json字符串的拼接、json字符串与json对象之间的转换

    更新操作  后台 /** * 更新人员 * @return "updateSdr" */ public String updateTheSdr(){ jsonstr = " ...

  4. json字符串的拼接,并转换为json对象

    <html> <head> <script> var qianzhui = "cc"; var test1=""; func ...

  5. json字符串手动拼接

    return "xxx{" + "xxx='" + xxx+ '\'' + ", ggg='" + ggg+ '\'' + ", ...

  6. 构建简单的json树形菜单

    json结构: var Menu = [{ tit:"一级菜单", submenu:[{ tit:"二级菜单", url:"", func: ...

  7. Java实现微信菜单json字符串拼接

    Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ...

  8. 基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串、list集合(MVC5)<二>

    上篇博客给大家介绍了基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串.list集合(MVC5)<一>, 其中的两种方式都显得有些冗余.接着上篇博客继续 ...

  9. IOS开发之——使用SBJson拼接Json字符串

    SBJson包的下载地址在上一篇文章中. 能够使用NSDictionary中的键值对来拼接Json数据,很方便,也能够进行嵌套,直接上代码: //開始拼接Json字符串 NSDictionary *d ...

随机推荐

  1. SQL2005 遍历表插入

    /* sql2005遍历表(方法1) insert into 数据表(userid,adddate) values((select userid from 用户表),date); */ /*sql20 ...

  2. 万恶的ViewBag

    作个记录,鼓捣了一晚上,他竟然把订单事情给我篡改了 ViewBag.orderNo="20150613202108844"; 页面上出来的竟然是20150613202108840 ...

  3. Sql的一些概念

    聚合函数 聚合函数可以返回整个或者几个列或者一个列的汇总数据,它常用来计算SELECT语句查询的统计值.聚合函数经常与SELECT语句的GROUP BY 子句一同使用.

  4. (整理)IIS 7 503 "service unavailable" errors

    原文地址:http://mvolo.com/where-did-my-iis7-server-go-troubleshooting-503-quotservice-unavailablequot-er ...

  5. The trash has reached its maximum size

    From: http://hi.baidu.com/aipie0066/item/1d7fb3e3a4710b3a4cdcaf5e The trash has reached its maximum  ...

  6. Testin云测试平台初体验

    这几天偶然接触到了一个叫做Testin的云测试平台,经过一番体验,感觉还是不错的,因为里面提供了大量的测试机型,可以针对Android手机的严重碎片化现象做出比较全面的测试,同时Testin的测试内容 ...

  7. 洛谷P3383 【模板】线性筛素数

    P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 Too many or Too few lines 样例解释有问题 ...

  8. 2016-08-15:从YUV420P中提取指定大小区域

    typedef struct { int width; int height; }SizeInfo; typedef struct { int x; int y; int width; int hei ...

  9. 安装和使用memcached

    引用:http://www.czhphp.com/archives/252 如何将 memcached 融入到您的环境中? 在开始安装和使用 using memcached 之前,我们需要了解如何将 ...

  10. Device Path in WinPrefetchView

    As we know that the Prefetch file is used for optimizing the loading time of the application in the ...