用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;
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM