最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用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. html5 xdm 页面之间的通信

    <!-- 这个是父页面xdm.html --><!DOCTYPE html> <html> <head> <meta charset=" ...

  2. MYSQL C API : struct MYSQL_STMT 结构的组合使用

    #include <iostream> #include <string> #include <string.h> #include <assert.h> ...

  3. C#_GDI+详细教程(图形图像编程基础)

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...

  4. vs无法调试的时候

    ①选中所有程序可能经过的地方设置断点 ②清空.net frameword对应的缓存,路径"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temp ...

  5. [转]遍历windows服务

    原文:http://www.codeproject.com/Articles/1573/About-Windows-Services #include <windows.h> #inclu ...

  6. No.016 3Sum Closest

    16. 3Sum Closest Total Accepted: 86565 Total Submissions: 291260 Difficulty: Medium Given an array S ...

  7. Android 使用 ksoap2-android 访问WebService(C#)

    Android 客户端与后台数据交互的方式有很多种.今天这里记录一下,与WebService的数据交互. 新建一个简单的WebService 创建方式如下: 创建好的项目是这样的. 我们在里面写几句简 ...

  8. shell_基础知识

    参考: http://blog.csdn.net/kaizi318/article/details/9343551 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告 ...

  9. jQuery Mobile 脚本加载问题

    刚开始使用jQuery Mobile,发现很多问题需要重新考虑,比如脚本加载问题. 在普通html中,如果a.html中有链接到b.html,b.html中有类似代码: $(document).rea ...

  10. KBMMW 4.90.00 发布

    kbmMW is a portable, highly scalable, high end application server andenterprise architecture integra ...