用java代码将从数据库中取出的具有父子关系的数据转成json格式
思路:
①、取出数据中的所有父节点放入一个集合中
②、取出数据中所有为该父节点的子节点放入另一个集合中
③、用到迭代的方法将子节点一层一层的遍历
工具类:
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;
}
}
用java代码将从数据库中取出的具有父子关系的数据转成json格式的更多相关文章
- 【HBase】通过Java代码实现HBase数据库中数据的增删改查
目录 创建maven工程,导入jar包 java代码实现创建hbase表 java代码实现向hbase表中插入数据 java代码查询hbase数据 使用rowKey查询指定列族指定列的值 通过star ...
- 数据库中取出YYYY-mm-dd H:i:s的数据怎么将其转化成YYYY/mm/dd格式,另外,怎么将一个数据表中的数据插入另一个数据表
sql语句是select left(replace(rq,'-','/'),10) as rq from 表名 tp5.1中的写法 $res = Db::table('表名') ->field ...
- 通过java代码往mysql数据库中写入日期相关数据少13个小时
通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...
- easyui获取table列表中所有数据组装成json格式发送到后台
jsp代码 var rows =$('#findAllRolestable').datagrid('getSelections'); var result = JSON.stringify(rows) ...
- C#中任意类型数据转成JSON格式
/// <summary> /// List转成json /// </summary> /// <typeparam name="T&quo ...
- Ueditor编辑旧文章,从数据库中取出要修改的内容
Ueditor编辑旧文章,从数据库中取出要修改的内容然后放置到编辑器中: <script type="text/plain" id="editor"> ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- MySQL_(Java)使用JDBC向数据库中修改(update)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
- MySQL_(Java)使用JDBC向数据库中删除(delete)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
随机推荐
- SQLSERVER 执行过的语句查询
total_worker_time AS [总消耗CPU 时间(ms)], execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms ...
- 阿里云安装配置mysql(centos版)
这种是利用yum下载的也可以使用xftp上传 1,安装mysql数据库 a)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-re ...
- Spring对事务管理的支持的发展历程(基础篇)
1.问题 Connection conn = DataSourceUtils.getConnection(); //开启事务 conn.setAutoCommit(false); try { Obje ...
- HTML DOM 实例
DOMAnchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向 ...
- ORACLE分页SQL语句(转载)
1.根据ROWID来分select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select r ...
- javaScript(6)---流程控制语句
学习要点: 1.语句的定义 2.if 语句 3.switch语句 4.do...while语句 5.while语句 6.for语句 7.for...in语句 8.break和continue语句 9. ...
- parted分区详解 查看UUID两种方式 blkid 和 ls -l /dev/disk/by-uuid
通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大:而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.但是现在的磁盘空间很多都已经是 ...
- MQTT入手笔记(二)
Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案.本文的主旨在于记录M ...
- 浏览器选择最新IE渲染
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
- 用js来实现那些数据结构—目录
首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做<学习JavaScript数据结构和算法>(第二版),人民邮电出版社出版的这本书.github ...