加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.com/)- 科技、建站、内容创作、云计算、网络安全!
当前位置: 首页 > 编程开发 > Java > 正文

java根据数据库表内容生产树结构json数据的方法

发布时间:2021-01-17 13:44:03 所属栏目:Java 来源:互联网
导读:1、利用场景组织机构树,通常会有组织机构表,其中有code(代码),pcode(上级代码),name(组织名称)等字段

1、利用场景

组织机构树,通常会有组织机构表,其中有code(代码),pcode(上级代码),name(组织名称)等字段

2、构造数据(以下数据并不是组织机构数据,而纯属本人胡编乱造的数据)

List<Tree<Test>> trees = new ArrayList<Tree<Test>>();
tests.add(new Test("0","","关于本人"));
tests.add(new Test("1","0","技术学习"));
tests.add(new Test("2","兴趣"));
tests.add(new Test("3","1","JAVA"));
tests.add(new Test("4","oracle"));
tests.add(new Test("5","spring"));
tests.add(new Test("6","springmvc"));
tests.add(new Test("7","fastdfs"));
tests.add(new Test("8","linux"));
tests.add(new Test("9","2","骑行"));
tests.add(new Test("10","吃喝玩乐"));
tests.add(new Test("11","学习"));
tests.add(new Test("12","3","String"));
tests.add(new Test("13","4","sql"));
tests.add(new Test("14","5","ioc"));
tests.add(new Test("15","aop"));
tests.add(new Test("16","等等"));
tests.add(new Test("17","等等"));
tests.add(new Test("18","等等"));
tests.add(new Test("19","等等"));
tests.add(new Test("20","等等"));

3、源码

Tree.java

package pers.kangxu.datautils.bean.tree;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

/**
 * tree TODO <br>
 * 
 * @author kangxu2 2017-1-7
 * 
 */
public class Tree<T> {
  /**
   * 节点ID
   */
  private String id;
  /**
   * 显示节点文本
   */
  private String text;
  /**
   * 节点状态,open closed
   */
  private String state = "open";
  /**
   * 节点是否被选中 true false
   */
  private boolean checked = false;
  /**
   * 节点属性
   */
  private List<Map<String,Object>> attributes;
  /**
   * 节点的子节点
   */
  private List<Tree<T>> children = new ArrayList<Tree<T>>();

  /**
   * 父ID
   */
  private String parentId;
  /**
   * 是否有父节点
   */
  private boolean isParent = false;
  /**
   * 是否有子节点
   */
  private boolean isChildren = false;

  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 getState() {
    return state;
  }

  public void setState(String state) {
    this.state = state;
  }

  public boolean isChecked() {
    return checked;
  }

  public void setChecked(boolean checked) {
    this.checked = checked;
  }

  public List<Map<String,Object>> getAttributes() {
    return attributes;
  }

  public void setAttributes(List<Map<String,Object>> attributes) {
    this.attributes = attributes;
  }

  public List<Tree<T>> getChildren() {
    return children;
  }

  public void setChildren(List<Tree<T>> children) {
    this.children = children;
  }

  public boolean isParent() {
    return isParent;
  }

  public void setParent(boolean isParent) {
    this.isParent = isParent;
  }

  public boolean isChildren() {
    return isChildren;
  }

  public void setChildren(boolean isChildren) {
    this.isChildren = isChildren;
  }

  public String getParentId() {
    return parentId;
  }

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

  public Tree(String id,String text,String state,boolean checked,List<Map<String,Object>> attributes,List<Tree<T>> children,boolean isParent,boolean isChildren,String parentID) {
    super();
    this.id = id;
    this.text = text;
    this.state = state;
    this.checked = checked;
    this.attributes = attributes;
    this.children = children;
    this.isParent = isParent;
    this.isChildren = isChildren;
    this.parentId = parentID;
  }

  public Tree() {
    super();
  }

  @Override
  public String toString() {
    
    return JSON.toJSONString(this);
  }

}

BuildTree.java

package pers.kangxu.datautils.common.tree;

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

import pers.kangxu.datautils.bean.tree.Tree;

/**
 * 构建tree
 * TODO
 * <br>
 * @author kangxu2 2017-1-7
 *
 */
public class BuildTree {

  /**
   * 
   * TODO
   * <br>
   * @author kangxu2 2017-1-7
   *
   * @param nodes
   * @return
   */
  public static <T> Tree<T> build(List<Tree<T>> nodes) {

    if(nodes == null){
      return null;
    }
    List<Tree<T>> topNodes = new ArrayList<Tree<T>>();

    for (Tree<T> children : nodes) {

      String pid = children.getParentId();
      if (pid == null || "".equals(pid)) {
        topNodes.add(children);

        continue;
      }

      for (Tree<T> parent : nodes) {
        String id = parent.getId();
        if (id != null && id.equals(pid)) {
          parent.getChildren().add(children);
          children.setParent(true);
          parent.setChildren(true);
          
          continue;
        }
      }

    }

    Tree<T> root = new Tree<T>();
    if (topNodes.size() == 0) {
      root = topNodes.get(0);
    } else {
      root.setId("-1");
      root.setParentId("");
      root.setParent(false);
      root.setChildren(true);
      root.setChecked(true);
      root.setChildren(topNodes);
      root.setText("顶级节点");

    }

    return root;
  }

}

BuildTreeTester.java

package pers.kangxu.datautils.test;

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

import pers.kangxu.datautils.bean.tree.Tree;
import pers.kangxu.datautils.common.tree.BuildTree;

public class BuildTreeTester {

  public static void main(String[] args) {
    
    
    List<Tree<Test>> trees = new ArrayList<Tree<Test>>();
    List<Test> tests = new ArrayList<Test>();
    tests.add(new Test("0","关于本人"));
    tests.add(new Test("1","技术学习"));
    tests.add(new Test("2","兴趣"));
    tests.add(new Test("3","JAVA"));
    tests.add(new Test("4","oracle"));
    tests.add(new Test("5","spring"));
    tests.add(new Test("6","springmvc"));
    tests.add(new Test("7","fastdfs"));
    tests.add(new Test("8","linux"));
    tests.add(new Test("9","骑行"));
    tests.add(new Test("10","吃喝玩乐"));
    tests.add(new Test("11","学习"));
    tests.add(new Test("12","String"));
    tests.add(new Test("13","sql"));
    tests.add(new Test("14","ioc"));
    tests.add(new Test("15","aop"));
    tests.add(new Test("16","等等"));
    tests.add(new Test("17","等等"));
    tests.add(new Test("18","等等"));
    tests.add(new Test("19","等等"));
    tests.add(new Test("20","等等"));
    
    for (Test test : tests) {
      Tree<Test> tree = new Tree<Test>();
      tree.setId(test.getId());
      tree.setParentId(test.getPid());
      tree.setText(test.getText());
      
      trees.add(tree);
    }

    Tree<Test> t = BuildTree.build(trees);
    System.out.println(t);
  }
}

class Test {

  private String id;
  private String pid;
  private String text;

  public String getId() {
    return id;
  }

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

  public String getPid() {
    return pid;
  }

  public void setPid(String pid) {
    this.pid = pid;
  }

  public String getText() {
    return text;
  }

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

  public Test(String id,String pid,String text) {
    super();
    this.id = id;
    this.pid = pid;
    this.text = text;
  }

  public Test() {
    super();
  }

  @Override
  public String toString() {
    return "Test [id=" + id + ",pid=" + pid + ",text=" + text + "]";
  }

}

4、运行结果

JSON数据:

{
  "checked": true,"children": [
    {
      "checked": false,"children": [
        {
          "checked": false,"children": [
            {
              "checked": false,"children": [
                {
                  "checked": false,"children": [],"id": "12","parent": true,"parentId": "3","state": "open","text": "String"
                },{
                  "checked": false,"id": "18","text": "等等"
                }
              ],"id": "3","parentId": "1","text": "JAVA"
            },{
              "checked": false,"id": "13","parentId": "4","text": "sql"
                },"id": "19","id": "4","text": "oracle"
            },"id": "14","parentId": "5","text": "ioc"
                },"id": "15","text": "aop"
                },"id": "20","id": "5","text": "spring"
            },"id": "6","text": "springmvc"
            },"id": "7","text": "fastdfs"
            },"id": "8","text": "linux"
            },"id": "16","text": "等等"
            }
          ],"id": "1","parentId": "0","text": "技术学习"
        },{
          "checked": false,"id": "9","parentId": "2","text": "骑行"
            },"id": "10","text": "吃喝玩乐"
            },"id": "11","text": "学习"
            },"id": "17","id": "2","text": "兴趣"
        }
      ],"id": "0","parent": false,"parentId": "","text": "关于本人"
    }
  ],"id": "-1","text": "顶级节点"
}

以上就是小编为大家带来的java根据数据库表内容生产树结构json数据的方法全部内容了,希望大家多多支持编程小技巧~

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读