java根据数据库中的数据 的list 生成 tree 型 json

这些代码 本来 也是 我网上找的但是 很遗憾 ,用数据源取到的list ,无法正常返回到前台,list 转json 的时候 就会 出错 ,我展示 正确的代码

1.

package com.labci.javamail.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
* 节点类
*/
class Node {
 /**
  * 节点编号
  */
 public String id;
 /**
  * 节点内容
  */
 public String text;
 /**
  * 父节点编号
  */
 public String parentId;
 /**
  * 孩子节点列表
  */  

 private children children = new children();  

 // 先序遍历,拼接JSON字符串
 public String toString() {
  String result = "{"
   + "id : ‘" + id + "‘"
   + ", text : ‘" + text + "‘";  

  if (children != null && children.getSize() != 0) {
   result += ", children : " + children.toString();
  } else {
   result += ", leaf : true";
  }  

  return result + "}";
 }  

 // 兄弟节点横向排序
 public void sortChildren() {
  if (children != null && children.getSize() != 0) {
   children.sortChildren();
  }
 }  

 // 添加孩子节点
 public void addChild(Node node) {
  this.children.addChild(node);
 }

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public String getParentId() {
    return parentId;
}

public void setParentId(String parentId) {
    this.parentId = parentId;
}

public children getChildren() {
    return children;
}

public void setChildren(children children) {
    this.children = children;
}  

}

2

package com.labci.javamail.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
* 孩子列表类
*/
public class  children {
 private List list = new ArrayList();  

 public int getSize() {
  return list.size();
 }  

 public void addChild(Node node) {
  list.add(node);
 }  

 // 拼接孩子节点的JSON字符串
 public String toString() {
  String result = "[";
  for (Iterator it = list.iterator(); it.hasNext();) {
   result += ((Node) it.next()).toString();
   result += ",";
  }
  result = result.substring(0, result.length() - 1);
  result += "]";
  return result;
 }  

 public List getList() {
    return list;
}

public void setList(List list) {
    this.list = list;
}

// 孩子节点排序
 public void sortChildren() {
  // 对本层节点进行排序
  // 可根据不同的排序属性,传入不同的比较器,这里传入ID比较器
  Collections.sort(list);
  // 对每个节点的下一层节点进行排序
  for (Iterator it = list.iterator(); it.hasNext();) {
   ((Node) it.next()).sortChildren();
  }
 }
}  

3

package com.labci.javamail.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class VirtualDataGenerator {
     // 按照节点编号比较
    public static List getVirtualResult() {
        List dataList = new ArrayList();  

        HashMap dataRecord1 = new HashMap();
        dataRecord1.put("id", "112000");
        dataRecord1.put("text", "廊坊银行解放道支行");
        dataRecord1.put("parentId", "110000");  

        HashMap dataRecord2 = new HashMap();
        dataRecord2.put("id", "112200");
        dataRecord2.put("text", "廊坊银行三大街支行");
        dataRecord2.put("parentId", "112000");  

        HashMap dataRecord3 = new HashMap();
        dataRecord3.put("id", "112100");
        dataRecord3.put("text", "廊坊银行广阳道支行");
        dataRecord3.put("parentId", "112000");  

        HashMap dataRecord4 = new HashMap();
        dataRecord4.put("id", "113000");
        dataRecord4.put("text", "廊坊银行开发区支行");
        dataRecord4.put("parentId", "110000");  

        HashMap dataRecord5 = new HashMap();
        dataRecord5.put("id", "100000");
        dataRecord5.put("text", "廊坊银行总行");
        dataRecord5.put("parentId", "");  

        HashMap dataRecord6 = new HashMap();
        dataRecord6.put("id", "110000");
        dataRecord6.put("text", "廊坊分行");
        dataRecord6.put("parentId", "100000");  

        HashMap dataRecord7 = new HashMap();
        dataRecord7.put("id", "111000");
        dataRecord7.put("text", "廊坊银行金光道支行");
        dataRecord7.put("parentId", "110000");  

        HashMap dataRecord8 = new HashMap();
        dataRecord8.put("id", "111000");
        dataRecord8.put("text", "廊坊银行金光道支行wwwwww");
        dataRecord8.put("parentId", "100000");  

        dataList.add(dataRecord1);
        dataList.add(dataRecord2);
        dataList.add(dataRecord3);
        dataList.add(dataRecord4);
        dataList.add(dataRecord5);
        dataList.add(dataRecord6);
        dataList.add(dataRecord7);
        dataList.add(dataRecord8);
         System.out.println(dataList);
        return dataList;
    }  

}

4。注:List dataList = VirtualDataGenerator.getVirtualResult(); list 换成自己的 从数据库中取出的list 就可以了 哈

package com.labci.javamail.test;  

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Collections;  

import com.labci.javamail.test.VirtualDataGenerator;

/**
 * 多叉树类
 */
public class MultipleTree {
    public static void main(String[] args) {
        // 读取层次数据结果集列表
        List dataList = VirtualDataGenerator.getVirtualResult();  

        // 节点列表(散列表,用于临时存储节点对象)
        HashMap nodeList = new HashMap();
        // 根节点
        Node root = null;
        // 将结果集存入散列表(后面将借助散列表构造多叉树)
        for (Iterator it = dataList.iterator(); it.hasNext();) {
            Map dataRecord = (Map) it.next();
            Node node = new Node();
            node.id = (String) dataRecord.get("id");
            node.text = (String) dataRecord.get("text");
            node.parentId = (String) dataRecord.get("parentId");
            nodeList.put(node.id, node);
        }
        // 构造无序的多叉树
        Set entrySet = nodeList.entrySet();
        for (Iterator it = entrySet.iterator(); it.hasNext();) {
            Node node = (Node) ((Map.Entry) it.next()).getValue();
            if (node.parentId == null || node.parentId.equals("")) {
                root = node;
            } else {
                ((Node) nodeList.get(node.parentId)).addChild(node);
            }
        }
        // 输出无序的树形菜单的JSON字符串
        System.out.println(root);
        // 对多叉树进行横向排序
        root.sortChildren();
        // 输出有序的树形菜单的JSON字符串
        System.out.println(root);  

        // 程序输出结果如下:
        //
        // 无序的树形菜单(格式化后的结果,可使用JSON格式化工具查看,
        // 例如 http://jsonviewer.stack.hu/ 在线查看器):
        //  {
        //   id : ‘100000‘,
        //   text : ‘廊坊银行总行‘,
        //   children : [
        //     {
        //     id : ‘110000‘,
        //     text : ‘廊坊分行‘,
        //     children : [
        //       {
        //       id : ‘113000‘,
        //       text : ‘廊坊银行开发区支行‘,
        //       leaf : true
        //       },
        //       {
        //       id : ‘111000‘,
        //       text : ‘廊坊银行金光道支行‘,
        //       leaf : true
        //       },
        //       {
        //       id : ‘112000‘,
        //       text : ‘廊坊银行解放道支行‘,
        //       children : [
        //         {
        //         id : ‘112200‘,
        //         text : ‘廊坊银行三大街支行‘,
        //         leaf : true
        //         },
        //         {
        //         id : ‘112100‘,
        //         text : ‘廊坊银行广阳道支行‘,
        //         leaf : true
        //         }
        //       ]
        //       }
        //     ]
        //     }
        //   ]
        //  }  

        // 有序的树形菜单(格式化后的结果):
        //  {
        //   id : ‘100000‘,
        //   text : ‘廊坊银行总行‘,
        //   children : [
        //     {
        //     id : ‘110000‘,
        //     text : ‘廊坊分行‘,
        //     children : [
        //       {
        //       id : ‘111000‘,
        //       text : ‘廊坊银行金光道支行‘,
        //       leaf : true
        //       },
        //       {
        //       id : ‘112000‘,
        //       text : ‘廊坊银行解放道支行‘,
        //       children : [
        //         {
        //         id : ‘112100‘,
        //         text : ‘廊坊银行广阳道支行‘,
        //         leaf : true
        //         },
        //         {
        //         id : ‘112200‘,
        //         text : ‘廊坊银行三大街支行‘,
        //         leaf : true
        //         }
        //       ]
        //       },
        //       {
        //       id : ‘113000‘,
        //       text : ‘廊坊银行开发区支行‘,
        //       leaf : true
        //       }
        //     ]
        //     }
        //   ]
        //  }    

    }  

}  

/**
 * 节点比较器
 */
class NodeIDComparator implements Comparator {
    // 按照节点编号比较
    public int compare(Object o1, Object o2) {
        int j1 = Integer.parseInt(((Node) o1).id);
        int j2 = Integer.parseInt(((Node) o2).id);
        return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1));
    }
}

原文地址:http://blog.51cto.com/11156310/2065157

时间: 2024-10-06 12:30:48

java根据数据库中的数据 的list 生成 tree 型 json的相关文章

java更改数据库中的数据

不废话,上代码 1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:更改数据库中的数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test04 { 11 12 public static void main(String[] args) { 13 // TODO Auto-generated method stub 14 try { 15 Class.forName("

Eclipse中java向数据库中添加数据

前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) 1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:向数据库中添加数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test01 { 11 12 public static void main(String

Java删除数据库中的数据

1:删除数据库中数据表中的数据同样也是一个非常用的技术,使用executeUpdate()方法执行用来做删除SQL的语句可以删除数据库表中的数据 2:本案例使用Statement接口中的executeUpdate()方法,删除数据库中users表中id为1的用户信息 1 package com.ningmeng; 2 3 import java.sql.*; 4 /** 5 * 6 * @author biexiansheng 7 * 8 */ 9 public class Test06 { 1

用Java向数据库中添加数据成功,但在数据库中找不到添加的数据

程序如下:--第一个类:package com.StudentCurriculavariable;import java.sql.*;public class JDBC_Connection {static String drivername="sun.jdbc.odbc.JdbcOdbcDriver";static String url="jdbc:odbc:chong";static String username="sa";static S

利用JAVA想数据库中提交数据

1.用户信息提交界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&qu

java实现数据库中的数据导入到Excel

1.添加 mysql-connector-java.1.7-bin.jar和jxl.jar包到项目的lib目录下- 2.数据库名为wiki 3.表名为stu 4.Excel文件目录:d://book.xls 5.编写类:连接mysql的字符串方法.插入的方法.实体类-- 表结构如下 : 链接数据库 表的实体类 将数据库的数据导入到Excel 效果显示

Java实现Excel导入数据库,数据库中的数据导入到Excel

实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java.sql.Co

是用JDBC从数据库中获取数据并以java对象返回

/** * * @param c * for example Person.class * @param primaryKeys * primaryKeys为主键,参数顺序和表中保持一致 如果id, name 为主键 类名为Person 则 getEntity(Person.class,1,"name") * @return */ public static Object getEntity(Class c, Object... primaryKeys) { PreparedState

用java向mysql数据库中插入数据为空

利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util.Scanner; import org.junit.Test;public class JDBCTest { //2).在测试方法testAAddStudent()中 //1.获取从控制台输入的Student对象:Student student=getStudentFromConsole(); /