用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 ...
随机推荐
- machine learning 之 Neural Network 3
整理自Andrew Ng的machine learning课程week6. 目录: Advice for applying machine learning (Decide what to do ne ...
- 用python-webdriver实现自动填表
在日常工作中常常需要重复填写某些表单,如果人工完成,费时费力,而且网络延迟令人十分崩溃.如果能够用程序实现自动填表,效率可以提高一倍以上,并且能够移植到多台计算机,进一步提高工作效率.webdrive ...
- [转]用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- 【精解】EOS标准货币体系与源码实现分析
EOS智能合约中包含一个exchange合约,它支持用户创建一笔交易,是任何两个基本货币类型之间的交易.这个合约的作用是跨不同币种(都是EOS上的标准货币类型)的,通过各自与EOS主链价值进行锚定,然 ...
- 自动生成MyEclipse 安装破解码
新建一个class 文件,Debug 模式运行一个,输入任意值 ,回车得到破解安装码 代码文件如下: import java.io.*; public class MyEclipseGen { pri ...
- java线程之创建线程类
1.extends Thread方法 class Person extends Thread { int sum1 = 50; // 含参构造器 public Person(String name) ...
- php坏境安装Xdebug详情步骤
原创,转载请注明出处! Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况,可以说是程序员必备的一个工具之一.好了,进入正题: 1.下 ...
- API文档模板
接口说明: 登录接口 修订历史: 版本号 制定人 修订日期 0.0.2 zenghui 2017-09-27 0.0.1 zanshan 2017-02-20 URL: http://xxx.xx.c ...
- 使用webpack打包后的vue项目如何运行(express)
我们知道使用webpack打包vue项目后会生成一个dist文件夹,dist文件夹下有html文件和其他css.js以及图片等,那么打包后的文件该如何正确运行呢? 倘若直接打开html文件,会报如下错 ...
- NOIP2017Day1题解
Day1 T1.小学奥数... 代码: #include<iostream> #include<cstring> #include<string> #include ...