用java代码将从数据库中取出的具有父子关系的数据转成json格式
2017-12-13 23:15
633 查看
思路:
①、取出数据中的所有父节点放入一个集合中
②、取出数据中所有为该父节点的子节点放入另一个集合中
③、用到迭代的方法将子节点一层一层的遍历
工具类:
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语言的eclipse读取数据库,并将数据转换成JSON格式输出
- Java SSH Hibernate通过代码实现从数据库中随机取出指定条数的随机数据
- Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级
- JAVA 根据数据库表内容生产树结构JSON数据的实例代码
- Java解析复杂嵌套JSON数据格式代码,提取出来所有的key和value。亲测代码可用
- mini学生管理系统。。。全部代码,4个java文件放在同一个包下面即可。用JDBC调用数据库取出数据。
- java 每日习题(十)数据库数据转成json格式
- 通过java代码对json格式数据进行解析
- Java SSH Hibernate通过代码实现从数据库中随机取出指定条数的随机数据
- java 将数据库中的数据转化为easyUI treegrid json格式
- 很好用的Google 开源项目Gson在java中解析和创建json格式的数据
- 关于Java解析json格式数据
- 一个java处理JSON格式数据的通用类
- 在JSP代码中输出JSON格式数据
- C# 在代码中创建 DataTable 和从数据库取出的数据 DataTable
- java对象转化为json格式数据
- 【原创】c#讲数据库数据转换为json格式(使用extjs,easyui中的datagrid)
- PHP JSON格式数据交互实例代码详解
- 父子窗体间传递JSON格式的数据的代码
- 如何使数据库中取出的数据保持原有格式