思路:①、取出数据中的所有父节点放入一个集合中②、取出数据中所有为该父节点的子节点放入另一个集合中③、用到迭代的方法将子节点一层一层的遍历工具类:package com.assasion.test;

import net.sf.json.JSONArray;

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

public class TreeBuilder {

        List<CompanyNode> nodes = new ArrayList<CompanyNode>();

        public TreeBuilder(List<CompanyNode> nodes) {            super();            this.nodes= nodes;        }

        /**         * 构建JSON树形结构         * @return         */        public String buildJSONTree() {            List<CompanyNode> nodeTree = buildTree();            JSONArray jsonArray = JSONArray.fromObject(nodeTree);            return jsonArray.toString();        }

        /**         * 构建树形结构         * @return         */        public List<CompanyNode> buildTree() {            List<CompanyNode> treeNodes = new ArrayList<CompanyNode>();            List<CompanyNode> rootNodes = getRootNodes();            for (CompanyNode rootNode : rootNodes) {                buildChildNodes(rootNode);                treeNodes.add(rootNode);            }            return treeNodes;        }

        /**         * 递归子节点         * @param node         */        public void buildChildNodes(CompanyNode node) {            List<CompanyNode> children = getChildNodes(node);            if (!children.isEmpty()) {                for(CompanyNode child : children) {                    buildChildNodes(child);                }                node.setChild(children);            }        }

        /**         * 获取父节点下所有的子节点         * @param pnode         * @return         */        public List<CompanyNode> getChildNodes(CompanyNode pnode) {//传入父节点对象,如果为该父节点的子节点,则放入子节点集合中            List<CompanyNode> childNodes = new ArrayList<CompanyNode>();            for (CompanyNode n : nodes){//从nodes中筛选所以为pnode的子节点                if (pnode.getCybh().equals(n.getSj_cybh())) {                    childNodes.add(n);                }            }            return childNodes;        }

        /**         * 判断是否为根节点         * @param node         * @return         */        public boolean rootNode(CompanyNode node) {            boolean isRootNode = true;            for (CompanyNode n : nodes){//从nodes中筛选所以父节点                if (node.getSj_cybh().equals(n.getCybh())) {//判断传入的node对象中,他的上级成员编号还有没有node中的成员编号与之对应,如果没有,则为根节点                    isRootNode= false;                    break;                }            }            return isRootNode;        }

        /**         * 获取集合中所有的根节点         * @return         */        public List<CompanyNode> getRootNodes() {            List<CompanyNode> rootNodes = new ArrayList<CompanyNode>();            for (CompanyNode n : nodes){                if (rootNode(n)) {                    rootNodes.add(n);//把所以的根节点放入rootNodes集合中                }            }            return rootNodes;        }}实体类:
package com.assasion.test;

import java.util.List;

public class CompanyNode {    private String name ;//公司名称    private String cybh;//成员编号    private String sj_cybh;//上级成员编号    private List<CompanyNode> child;//下级公司

    public CompanyNode() {    }

    public CompanyNode(String name, String cybh, String sj_cybh,List<CompanyNode> child) {        this.name = name;        this.cybh = cybh;        this.sj_cybh = sj_cybh;        this.child=child;    }

    public List<CompanyNode> getChild() {        return child;    }

    public void setChild(List<CompanyNode> child) {        this.child = child;    }

    public String getName() {        return name;    }

    public void setName(String name) {        this.name = name;    }

    public String getCybh() {        return cybh;    }

    public void setCybh(String cybh) {        this.cybh = cybh;    }

    public String getSj_cybh() {        return sj_cybh;    }

    public void setSj_cybh(String sj_cybh) {        this.sj_cybh = sj_cybh;    }}

转载于:https://www.cnblogs.com/assasion/p/8035437.html

用java代码将从数据库中取出的具有父子关系的数据转成json格式相关推荐

  1. java向mysql写入数据慢_通过java代码往mysql数据库中写入日期相关数据少13个小时...

    通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...

  2. 把php数据转成json格式转换,php将从数据库中获得的数据转换成json格式并输出的方法...

    php将从数据库中获得的数据转换成json格式并输出的方法 如下所示: header('content-type:application/json;charset=utf8'); $results = ...

  3. 怎么读取mysql库绘制柱状图_从数据库中取出最近三十天的数据并生成柱状图

    在终端用cd 命令进入文件目录 说明:此处例子我是拿项目中的一个例子讲解的. 1.新建一个项目 :用终端输入:zf create project Airline 格式:zf create action ...

  4. mysql怎么制作柱状图_从数据库中取出最近三十天的数据并生成柱状图

    在终端用cd 命令进入文件目录 说明:此处例子我是拿项目中的一个例子讲解的. 1.新建一个项目 :用终端输入:zf create project Airline 格式:zf create action ...

  5. 关于使用java程序从excel或者数据库中取出建表规则数据,自动生成数据库建表语句(适用于批量建数据库表)

    公司开发新系统,需要创建几百个数据库表,建表的规则已经写好放到Excel中,如果手动创建的话需要占用较长的时间去做,而且字段类型的规则又被放到了另一张表,如果手动去一个一个去匹配就很麻烦,所以我先把两 ...

  6. c 将图片存入到mysql数据库中_如何将图片转换存入到数据库中,并从数据库中取出转换成图片...

    有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来. 首先,我们要把图片存 ...

  7. 基于Java线程池读取数据库中数据(学习+运用)

    基于Java线程池读取数据库中数据(学习+运用) 以下是学习内容 Main.java import java.util.concurrent.ArrayBlockingQueue; import ja ...

  8. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  9. eclipes Java代码连接Mysql数据库

    Java代码连接Mysql数据库C 一.插件的下载与加载 1.下载与本地的MySQL对应版本的连接数据库的包,如mysql-connector-java-8.0.17.jar 下载Connector/ ...

最新文章

  1. What Are Words(一诺千金)
  2. jsp中include指令和动作的区别
  3. Dynamic Setting ImageUrl In DataPager
  4. 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找
  5. [数据库] Navicat for MySQL定时备份数据库及数据恢复
  6. java 高手_Java高手是怎样炼成的
  7. 【区块链】认识区块链的基本概念
  8. java ranger rest_使用REST
  9. 手机上调试html,在手机上打印调试信息 – debug.js
  10. javabean反射改字段内容_JSP第三篇「JavaBean的介绍、JSP的行为--JavaBean」(修订版)...
  11. 10分钟带你了解python_10分钟Python入门系列教程及学习资源分享
  12. 如何查看文件md5值
  13. [python]LDA模型使用流程及代码
  14. Win8.1 KB2919355更新无法正常安装完成,解决办法?
  15. 不意外:Facebook上市遭遇滑铁卢
  16. 银河麒麟操作系统常用问题及解决方法
  17. 四级高频词汇360个
  18. 入门级移动App服务器的软硬件需求
  19. 病毒RNA提取:EpiQuik 病毒RNA提取纯化试剂盒方案
  20. varnish php,php实现监控varnish缓存服务器的状态_PHP

热门文章

  1. opencv python 生成画布_第16章 坚持一百秒(《Python趣味创意编程》教学视频)
  2. ElasticFusion: Dense SLAM without A pose Graph
  3. 图谱特征与卷积神经网络的名优大米无损鉴别
  4. matlab快速将几幅图片放在一幅图片
  5. 只在用户登陆时运行_linux 系统的7个运行级别
  6. 基于知识库的自动问答:seq2seq模型实践
  7. 谷歌免费GPU,在线Jupyter notebook深度学习环境
  8. kafka数据 落盘_终于知道Kafka为什么这么快了!
  9. 7个等级 容灾等级_在餐厅吃饭竟是7级风险!最新社交风险等级出炉!
  10. 动态取值_软件测试|动态测试技术