新聞中心
樹形JSON列表怎么利用java與MySQL進(jìn)行拼接?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比招遠(yuǎn)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式招遠(yuǎn)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋招遠(yuǎn)地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
例如:
[ { "name": "商品目錄", "pid": "-1", "id": "1", "children": [ { "name": "日用品", "pid": "1", "id": "11", "children": [ { "name": "洗發(fā)水", "pid": "11", "id": "111", "children": [ { "name": "霸王", "pid": "111", "id": "1111", "children": [] } ] } ] }, { "name": "食品", "pid": "1", "id": "12", "children": [] } ] } ]
整體思路分為兩步,第一步獲取目錄及其所有子目錄,獲取后的列表形式如下:
[ {"id":"1","pid":"-1","name":"商品目錄"}, {"id":"11","pid":"1","name":"日用品"}, {"id":"12","pid":"1","name":"食品"}, {"id":"111","pid":"11","name":"洗發(fā)水"}, {"id":"1111","pid":"111","name":"霸王"} ]
第二步,利用遞歸思想拼裝該數(shù)據(jù),拼裝方法的工具類如下:
package *.*.*; import net.sf.json.JSONArray; import java.util.ArrayList; import java.util.List; /** * 構(gòu)造目錄JSON樹 * Created by fukang on 2017/5/26 0026. */ public class TreeBuilder { Listnodes = new ArrayList<>(); public String buildTree(List nodes) { TreeBuilder treeBuilder = new TreeBuilder(nodes); return treeBuilder.buildJSONTree(); } public TreeBuilder() { } public TreeBuilder(List nodes) { super(); this.nodes = nodes; } // 構(gòu)建JSON樹形結(jié)構(gòu) public String buildJSONTree() { List nodeTree = buildTree(); JSONArray jsonArray = JSONArray.fromObject(nodeTree); return jsonArray.toString(); } // 構(gòu)建樹形結(jié)構(gòu) public List buildTree() { List treeNodes = new ArrayList<>(); List rootNodes = getRootNodes(); for (Node rootNode : rootNodes) { buildChildNodes(rootNode); treeNodes.add(rootNode); } return treeNodes; } // 遞歸子節(jié)點(diǎn) public void buildChildNodes(Node node) { List children = getChildNodes(node); if (!children.isEmpty()) { for (Node child : children) { buildChildNodes(child); } node.setChildren(children); } } // 獲取父節(jié)點(diǎn)下所有的子節(jié)點(diǎn) public List getChildNodes(Node pnode) { List childNodes = new ArrayList<>(); for (Node n : nodes) { if (pnode.getId().equals(n.getPid())) { childNodes.add(n); } } return childNodes; } // 判斷是否為根節(jié)點(diǎn) public boolean rootNode(Node node) { boolean isRootNode = true; for (Node n : nodes) { if (node.getPid().equals(n.getId())) { isRootNode = false; break; } } return isRootNode; } // 獲取集合中所有的根節(jié)點(diǎn) public List getRootNodes() { List rootNodes = new ArrayList<>(); for (Node n : nodes) { if (rootNode(n)) { rootNodes.add(n); } } return rootNodes; } public static class Node { private String id; private String pid; private String name; private List children; public Node() { } public Node(String id, String pid, String name) { super(); this.id = id; this.pid = pid; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } } }
在Controller中的調(diào)用方法是:
@RequestMapping("/bulidJsonTree") @ResponseBody public String buildJsonTree(HttpServletRequest request) { // 獲取全部目錄節(jié)點(diǎn) Listnodes = iGoodsDirSvc.getAllDirList(); // 拼裝樹形json字符串 String json = new TreeBuilder().buildTree(nodes); return json; }
其中iGoodsDirSvc.getAllDirList()
方法需要將取到的數(shù)據(jù)轉(zhuǎn)為Node類型:
String hql = "select id as id,pId as pid,name as name from Directory"; Query query = factory.getCurrentSession().createQuery(hql) .setResultTransformer(Transformers.aliasToBean(TreeBuilder.Node.class)); return query.list();
看完上述內(nèi)容,你們掌握樹形JSON列表怎么利用java與mysql進(jìn)行拼接的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
標(biāo)題名稱:樹形JSON列表怎么利用java與mysql進(jìn)行拼接
轉(zhuǎn)載源于:http://www.ef60e0e.cn/article/gdcsee.html