首页 > 编程 > Java > 正文

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

2019-11-26 13:17:57
字体:
来源:转载
供稿:网友

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", "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 <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", "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<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,                  "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": "顶级节点"}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表