• 技术文章 >Java >java教程

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

    高洛峰高洛峰2017-01-10 11:47:48原创394
    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": "顶级节点"
    }

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

    更多java根据数据库表内容生产树结构json数据的方法相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java json 数据库
    上一篇:Java 正则表达式匹配模式(贪婪型、勉强型、占有型) 下一篇:JAVA 根据数据库表内容生产树结构JSON数据的实例代码
    PHP编程就业班

    相关文章推荐

    • 实例详解Java反序列化之反射机制• 五种方法!Java创建多线程总结• Java基础之类和对象、单例模式、继承• JAVA-5NIO之Selector• java基础之Object类

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网