用java代碼將從資料庫中取出的具有父子關係的資料轉成json格式

來源:互聯網
上載者:User

標籤:test   from   ret   json.js   公司   builder   for   asi   方法   

思路:
①、取出資料中的所有父節點放入一個集合中
②、取出資料中所有為該父節點的子節點放入另一個集合中
③、用到迭代的方法將子節點一層一層的遍曆
工具類:
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格式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.