JAVA 根据数据库表内容生产树结构JSON数据的实例代码

1、利用场景

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

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

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

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 
* * @author kangxu2 2017-1-7 * */ public class Tree { /** * 节点ID */ private String id; /** * 显示节点文本 */ private String text; /** * 节点状态,open closed */ private String state = "open"; /** * 节点是否被选中 true false */ private boolean checked = false; /** * 节点属性 */ private List> attributes; /** * 节点的子节点 */ private List> children = new ArrayList>(); /** * 父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> getAttributes() { return attributes; } public void setAttributes(List> attributes) { this.attributes = attributes; } public List> getChildren() { return children; } public void setChildren(List> 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> attributes, List> 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
 * 
* @author kangxu2 2017-1-7 * */ public class BuildTree { /** * * TODO *
* @author kangxu2 2017-1-7 * * @param nodes * @return */ public static Tree build(List> nodes) { if(nodes == null){ return null; } List> topNodes = new ArrayList>(); for (Tree children : nodes) { String pid = children.getParentId(); if (pid == null || "".equals(pid)) { topNodes.add(children); continue; } for (Tree parent : nodes) { String id = parent.getId(); if (id != null && id.equals(pid)) { parent.getChildren().add(children); children.setParent(true); parent.setChildren(true); continue; } } } Tree root = new Tree(); 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> trees = new ArrayList>();
    List tests = new ArrayList();
    tests.add(new Test("0", "", "关于本人"));
    tests.add(new Test("1", "0", "技术学习"));
    tests.add(new Test("2", "0", "兴趣"));
    tests.add(new Test("3", "1", "JAVA"));
    tests.add(new Test("4", "1", "oracle"));
    tests.add(new Test("5", "1", "spring"));
    tests.add(new Test("6", "1", "springmvc"));
    tests.add(new Test("7", "1", "fastdfs"));
    tests.add(new Test("8", "1", "linux"));
    tests.add(new Test("9", "2", "骑行"));
    tests.add(new Test("10", "2", "吃喝玩乐"));
    tests.add(new Test("11", "2", "学习"));
    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", "5", "aop"));
    tests.add(new Test("16", "1", "等等"));
    tests.add(new Test("17", "2", "等等"));
    tests.add(new Test("18", "3", "等等"));
    tests.add(new Test("19", "4", "等等"));
    tests.add(new Test("20", "5", "等等"));
    for (Test test : tests) {
      Tree tree = new Tree();
      tree.setId(test.getId());
      tree.setParentId(test.getPid());
      tree.setText(test.getText());
      trees.add(tree);
    }
    Tree 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,
                  "children": [],
                  "id": "18",
                  "parent": true,
                  "parentId": "3",
                  "state": "open",
                  "text": "等等"
                }
              ],
              "id": "3",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "JAVA"
            },
            {
              "checked": false,
              "children": [
                {
                  "checked": false,
                  "children": [],
                  "id": "13",
                  "parent": true,
                  "parentId": "4",
                  "state": "open",
                  "text": "sql"
                },
                {
                  "checked": false,
                  "children": [],
                  "id": "19",
                  "parent": true,
                  "parentId": "4",
                  "state": "open",
                  "text": "等等"
                }
              ],
              "id": "4",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "oracle"
            },
            {
              "checked": false,
              "children": [
                {
                  "checked": false,
                  "children": [],
                  "id": "14",
                  "parent": true,
                  "parentId": "5",
                  "state": "open",
                  "text": "ioc"
                },
                {
                  "checked": false,
                  "children": [],
                  "id": "15",
                  "parent": true,
                  "parentId": "5",
                  "state": "open",
                  "text": "aop"
                },
                {
                  "checked": false,
                  "children": [],
                  "id": "20",
                  "parent": true,
                  "parentId": "5",
                  "state": "open",
                  "text": "等等"
                }
              ],
              "id": "5",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "spring"
            },
            {
              "checked": false,
              "children": [],
              "id": "6",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "springmvc"
            },
            {
              "checked": false,
              "children": [],
              "id": "7",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "fastdfs"
            },
            {
              "checked": false,
              "children": [],
              "id": "8",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "linux"
            },
            {
              "checked": false,
              "children": [],
              "id": "16",
              "parent": true,
              "parentId": "1",
              "state": "open",
              "text": "等等"
            }
          ],
          "id": "1",
          "parent": true,
          "parentId": "0",
          "state": "open",
          "text": "技术学习"
        },
        {
          "checked": false,
          "children": [
            {
              "checked": false,
              "children": [],
              "id": "9",
              "parent": true,
              "parentId": "2",
              "state": "open",
              "text": "骑行"
            },
            {
              "checked": false,
              "children": [],
              "id": "10",
              "parent": true,
              "parentId": "2",
              "state": "open",
              "text": "吃喝玩乐"
            },
            {
              "checked": false,
              "children": [],
              "id": "11",
              "parent": true,
              "parentId": "2",
              "state": "open",
              "text": "学习"
            },
            {
              "checked": false,
              "children": [],
              "id": "17",
              "parent": true,
              "parentId": "2",
              "state": "open",
              "text": "等等"
            }
          ],
          "id": "2",
          "parent": true,
          "parentId": "0",
          "state": "open",
          "text": "兴趣"
        }
      ],
      "id": "0",
      "parent": false,
      "parentId": "",
      "state": "open",
      "text": "关于本人"
    }
  ],
  "id": "-1",
  "parent": false,
  "parentId": "",
  "state": "open",
  "text": "顶级节点"
}

你可能感兴趣的:(JAVA 根据数据库表内容生产树结构JSON数据的实例代码)