java后端把数据转换为树,map递归生成json树,返回给前端(后台转换)
2023-12-10 java编程 跟版网 207
首先,需要明确一下这个过程的流程和目的:将后端获得的数据转换为树形结构,再通过递归生成 JSON 树,并返回给前端。下面我们将详细讲解这个过程。
首先,需要明确一下这个过程的流程和目的:将后端获得的数据转换为树形结构,再通过递归生成 JSON 树,并返回给前端。下面我们将详细讲解这个过程。
1. 将数据转换为树形结构
首先,需要将后端的数据进行转换,变成树形结构。可以使用递归来完成这个过程。
具体实现方式如下:首先,定义一个树节点的类 Node,包含节点名称、节点编号、父节点编号、节点类型等属性。然后,依次遍历后端返回的数据,对于每一条数据,查找其父节点是否已存在,如果存在则添加到父节点的子节点列表中,否则先创建父节点,然后将当前节点添加到父节点的子节点列表中。最终得到一个树形结构。
示例:
假设后端返回以下数据:
List<Map<String, Object>> data = [
{id: 1, pid: 0, name: 'root', type: 1},
{id: 2, pid: 1, name: 'node1', type: 2},
{id: 3, pid: 1, name: 'node2', type: 2},
{id: 4, pid: 2, name: 'node1-1', type: 3},
{id: 5, pid: 2, name: 'node1-2', type: 3},
{id: 6, pid: 3, name: 'node2-1', type: 3},
]
复制代码
这里我们可以看到数据中包含节点的编号、节点的父节点编号、节点的名称以及节点的类型等信息。
我们可以定义一个 Node 类来表示节点信息:
public class Node {
private String id;
private String parentId;
private String name;
private int type;
private List<Node> children;
// 构造函数,getter和setter方法
}
复制代码
接着,我们可以编写一个递归函数,将上述数据转换为树形结构,示例代码如下:
public Node buildTree(List<Map<String, Object>> data, String pid) {
List<Node> nodeList = new ArrayList<>();
// 第一次遍历,将所有节点存入nodeList中
for (Map<String, Object> map : data) {
Node node = new Node();
node.setId(map.get("id").toString());
node.setParentId(map.get("pid").toString());
node.setName(map.get("name").toString());
node.setType((int) map.get("type"));
nodeList.add(node);
}
// 第二次遍历,将nodeList中的节点添加到对应的父节点的子节点列表中
for (Node node : nodeList) {
if (pid.equals(node.getParentId())) {
children.add(node);
} else {
for (Node parent : nodeList) {
if (node.getParentId().equals(parent.getId())) {
parent.getChildren().add(node);
break;
}
}
}
}
// 第三次遍历,找出根节点并返回
for (Node node : nodeList) {
if (pid.equals(node.getId())) {
return node;
}
}
return null;
}
复制代码
2. 递归生成 JSON 树
得到了树形结构后,我们需要将其转换为 JSON 格式的数据,再返回给前端。
用递归的方式将树形结构转换成 JSON 格式的代码示例如下:
public JSONObject toJSON(Node node) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", node.getId());
jsonObject.put("name", node.getName());
jsonObject.put("type", node.getType());
if (node.getChildren() != null && node.getChildren().size() > 0) {
JSONArray jsonArray = new JSONArray();
for (Node child : node.getChildren()) {
jsonArray.add(toJSON(child));
}
jsonObject.put("children", jsonArray);
} else {
jsonObject.put("children", null);
}
return jsonObject;
}
复制代码
3. 最后,将 JSON 数据返回给前端
最后,将生成的 JSON 树返回给前端即可。可以使用 Spring Boot 等后端框架中的 REST 接口返回 JSON 数据。
示例:假设前端需要获取一个编号为 1 的节点的 JSON 树,则后端代码可以如下实现:
@GetMapping("/tree")
public JSONObject tree() {
List<Map<String, Object>> data = getDataFromDB();
Node root = buildTree(data, "1");
return toJSON(root);
}
复制代码
这个接口的作用是从数据库中获取数据,然后将数据转换为树形结构并返回 JSON 树,其中编号为 1 的节点作为根节点。
另外,需要在前端进行 AJAX 请求,获取后端生成的 JSON 树,并显示在页面上。
总结:
以上就是将后端的数据转换为树形结构,再通过递归生成 JSON 树,并返回给前端的完整攻略。需要注意的是,本文只提供了一个示例实现方法,在实际应用中,可能需要根据具体数据结构进行相应的修改。