java后端把数据转换为树,map递归生成json树,返回给前端(后台转换)

java后端把数据转换为树,map递归生成json树,返回给前端(后台转换)

2023-12-10java编程 跟版网 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 树,并返回给前端的完整攻略。需要注意的是,本文只提供了一个示例实现方法,在实际应用中,可能需要根据具体数据结构进行相应的修改。

相关推荐
Suhan422 小时前
IDEA 设置启动参数和环境变量
spring boot·spring·编辑器·idea
null_173 小时前
IntelliJ IDEA 极致流畅配置方案:Ultra 9 285K + 64GB 内存实测
java·ide·intellij-idea
橘子海全栈攻城狮6 小时前
【最新源码】基于SpringBoot + Vue的超市管理系统的设计与实现D002
java·开发语言·vue.js·spring boot·后端·spring
空中湖6 小时前
Spring AI Function Calling 完全指南:让 AI 查数据库、调 API、发通知
数据库·人工智能·spring
风起洛阳@不良使6 小时前
spring中xml和注解开发的对比
xml·java·spring
Tenifs6 小时前
关闭 IDEA 的英文单词拼写检查
java·intellij-idea
weixin_727535627 小时前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf
Ethan01078 小时前
spring事务隔离级别,如果数据库设置为RC,spring可以改为RR吗
spring
Ethan01079 小时前
详解Spring 事务三大核心接口,以及我们能用它来做什么
spring
dyonggan10 小时前
IDEA从零搭建SpringCloud Alibaba完整工程
java·spring cloud·intellij-idea