拼接树形JSON列表如何利用Java与MySQL递归的方法实现

这篇文章主要给大家介绍了关于利用java+mysql递归实现拼接树形JSON列表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。

前言

本文给大家介绍的是关于利用java+mysql递归实现拼接树形JSON列表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:

我们在做Java web项目时,前端控件例如国家-省-市-区-县等树形列表,常常需要多级树形json数据

例如:

[ { "name": "商品目录", "pid": "-1", "id": "1", "children": [  {  "name": "日用品",  "pid": "1",  "id": "11",  "children": [   {   "name": "洗发水",   "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":"洗发水"}, {"id":"1111","pid":"111","name":"霸王"}]

第二步,利用递归思想拼装该数据,拼装方法的工具类如下:

package *.*.*;import net.sf.json.JSONArray;import java.util.ArrayList;import java.util.List;/** * 构造目录JSON树 * Created by fukang on 2017/5/26 0026. */public class TreeBuilder { List<Node> nodes = new ArrayList<>(); public String buildTree(List<Node> nodes) {  TreeBuilder treeBuilder = new TreeBuilder(nodes);  return treeBuilder.buildJSONTree(); } public TreeBuilder() { } public TreeBuilder(List<Node> nodes) {  super();  this.nodes = nodes; } // 构建JSON树形结构 public String buildJSONTree() {  List<Node> nodeTree = buildTree();  JSONArray jsonArray = JSONArray.fromObject(nodeTree);  return jsonArray.toString(); } // 构建树形结构 public List<Node> buildTree() {  List<Node> treeNodes = new ArrayList<>();  List<Node> rootNodes = getRootNodes();  for (Node rootNode : rootNodes) {   buildChildNodes(rootNode);   treeNodes.add(rootNode);  }  return treeNodes; } // 递归子节点 public void buildChildNodes(Node node) {  List<Node> children = getChildNodes(node);  if (!children.isEmpty()) {   for (Node child : children) {    buildChildNodes(child);   }   node.setChildren(children);  } } // 获取父节点下所有的子节点 public List<Node> getChildNodes(Node pnode) {  List<Node> childNodes = new ArrayList<>();  for (Node n : nodes) {   if (pnode.getId().equals(n.getPid())) {    childNodes.add(n);   }  }  return childNodes; } // 判断是否为根节点 public boolean rootNode(Node node) {  boolean isRootNode = true;  for (Node n : nodes) {   if (node.getPid().equals(n.getId())) {    isRootNode = false;    break;   }  }  return isRootNode; } // 获取集合中所有的根节点 public List<Node> getRootNodes() {  List<Node> 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<Node> 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<Node> getChildren() {   return children;  }  public void setChildren(List<Node> children) {   this.children = children;  } }}

在Controller中的调用方法是:

 @RequestMapping("/bulidJsonTree") @ResponseBody public String buildJsonTree(HttpServletRequest request) {  // 获取全部目录节点  List<Node> nodes = iGoodsDirSvc.getAllDirList();  // 拼装树形json字符串  String json = new TreeBuilder().buildTree(nodes);  return json; }

其中iGoodsDirSvc.getAllDirList()方法需要将取到的数据转为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();

总结

以上就是拼接树形JSON列表如何利用Java与MySQL递归的方法实现的详细内容,更多请关注其它相关文章!

细数门前落叶,倾听窗外雨声,

拼接树形JSON列表如何利用Java与MySQL递归的方法实现

相关文章:

你感兴趣的文章:

标签云: