将数据库查询的的数据生成json格式的树

java中许多地方需要使用json格式的树,比如在前端展示菜单,展示目录结构什么的,这些都和树有关系,如果这些相应的数据在后台,我们就需要一个封装的方法来调用,通过传入数据库查询的数据,,最后返回给用户json格式的数据,而且是一个树状结构。

首先我们需要数据,假设List list =bgdatasorce.findBysql();获取到了数据库的相关数据,这个时候,我们需要将数据进行遍历,然后拼接成一棵树。

public void setMapValue(Map rootRootMap , Map recordMap){
Map<String , Object> map =  (Map) this.list.get(0);
for( String str : map.keySet() ){
rootRootMap.put(str, recordMap.get(str));
}
}

private List<Map> getRootChildrenOfbdmap(List list, List<Map> otherChildren) {
List<Map> childrenList = new ArrayList<Map>();
for (int i = 0; i < list.size(); i++) {
Map rootChildrenMap = new HashMap();
Map recordMap =  (Map) list.get(i);
setMapValue(rootChildrenMap,recordMap);
if( recordMap.get(RootSelKey) == null ){//不给对应的键设置值代表根节点中的父节点为空
rootChildrenMap.put("icon", "/image/sysbutton/regionleve1.png");
rootChildrenMap.put("expanded", false);
rootChildrenMap.put("leaf", false);
rootChildrenMap.put("name", recordMap.get(treeName));
rootChildrenMap.put("id", recordMap.get(treeId));
childrenList.add(rootChildrenMap);
}
else if ( recordMap.get(RootSelKey).equals(RootSelValue) ){
rootChildrenMap.put("icon", "/image/sysbutton/regionleve1.png");
rootChildrenMap.put("expanded", false);
rootChildrenMap.put("leaf", false);
rootChildrenMap.put("name", recordMap.get(treeName));
rootChildrenMap.put("id", recordMap.get(treeId));
childrenList.add(rootChildrenMap);
} else {
rootChildrenMap.put("icon", "/image/sysbutton/regionleve2.png");
rootChildrenMap.put("expanded", false);
rootChildrenMap.put("name", recordMap.get(treeName));
rootChildrenMap.put("id", recordMap.get(treeId));
rootChildrenMap.put("leaf", false);
rootChildrenMap.put("parentid", recordMap.get(treeParentid));
otherChildren.add(rootChildrenMap);
}
}
return childrenList;
}

上面的方法作用是将已有数据中的根节点和非根节点进行分离

private void getChildrenOfbdmap(List<Map> rootChildren, List<Map> otherChildren) {
for (int i = 0; i < rootChildren.size(); i++) {
List<Map> children = new ArrayList<Map>();
Map nodeMap = rootChildren.get(i);
for (int j = 0; j < otherChildren.size(); j++) {
Map childMap = otherChildren.get(j);
if (((String)nodeMap.get("id")).equals((String)childMap.get("parentid"))) {
children.add(childMap);
}
}
otherChildren.removeAll(children);
if (children.size() > 0) {
nodeMap.put("leaf", false);
nodeMap.put("icon", "/image/sysbutton/regionleve1.png");
nodeMap.put("name", nodeMap.get(treeName));
nodeMap.put("id", nodeMap.get(treeId));
nodeMap.put("parentid", nodeMap.get(treeParentid));
nodeMap.put("expanded", false);
nodeMap.put("children", children);
getChildrenOfbdmap(children, otherChildren);
} else {
nodeMap.put("checked", false);
nodeMap.put("leaf", true);
nodeMap.put("name", nodeMap.get(treeName));
nodeMap.put("expanded", false);
nodeMap.put("id", nodeMap.get(treeId));
nodeMap.put("parentid", nodeMap.get(treeParentid));
nodeMap.put("icon", "/image/sysbutton/regionleve2.png");
}

}

该方法是循环遍历非根节点,然后组建关系。

这两个方法的调用使用的是下面这个方法:

public JSONArray get_Tree() throws Exception {
List<Map> rootChildren = new ArrayList<Map>();
List<Map> otherChildren = new ArrayList<Map>();
rootChildren = getRootChildrenOfbdmap(list, otherChildren);
getChildrenOfbdmap(rootChildren, otherChildren);
return JSONArray.fromObject(rootChildren);
}

该方法返回的就是组建完成之后的树状结构的json数据了。


猜你喜欢

转载自blog.csdn.net/m0_37247144/article/details/78106253