Home  >  Article  >  Java  >  How to splice tree-shaped JSON lists using Java and MySQL recursive methods

How to splice tree-shaped JSON lists using Java and MySQL recursive methods

黄舟
黄舟Original
2017-08-08 09:58:051618browse

This article mainly introduces to you the method of using java+mysql recursion to implement splicing tree-shaped JSON lists. The article introduces it in great detail through sample code. It has certain reference learning value for everyone's study or work. It is needed Friends, let’s follow the editor and take a look.

Preface

This article introduces to you the relevant content about using java+mysql recursion to implement splicing tree-shaped JSON lists. Share it for your reference. Let’s learn for reference. Without further ado, let’s take a look at the detailed introduction:

When we are doing Java web projects, front-end controls such as country-province-city-district-county and other tree lists are often needed. Multi-level tree json data

For example:


##

[
 {
 "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": []
  }
 ]
 }
]

The overall idea is divided into two Step, the first step is to obtain the directory and all its subdirectories. The obtained list is as follows:


[
 {"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":"霸王"}
]

The second step is to use recursive thinking to assemble the data. The tool class of the assembly method is as follows:


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

In Controller The calling method is:

##

 @RequestMapping("/bulidJsonTree")
 @ResponseBody
 public String buildJsonTree(HttpServletRequest request) {

  // 获取全部目录节点
  List<Node> nodes = iGoodsDirSvc.getAllDirList();

  // 拼装树形json字符串
  String json = new TreeBuilder().buildTree(nodes);

  return json;
 }

The

iGoodsDirSvc.getAllDirList()

method needs to convert the obtained data into Node type :

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();

Summary

The above is the detailed content of How to splice tree-shaped JSON lists using Java and MySQL recursive methods. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn