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

相关推荐
kaili23034 分钟前
IDEA试用过期,无法登录,重置方法
java·intellij-idea
风槐啊2 小时前
邪修实战系列(3)
java·ide·spring boot·spring·tomcat
波波烤鸭6 小时前
深入理解 Gateway 网关:原理、源码解析与最佳实践
java·spring·gateway
心之伊始6 小时前
Spring Cloud Gateway:构建智能API网关的终极指南
java·spring
心月狐的流火号7 小时前
Spring Bean 生命周期详解——简单、清晰、全面、实用
java·spring
帧栈7 小时前
开发避坑指南(47):IDEA 2025.1.3 运行main函数报错:CreateProcess error=206, 文件名或扩展名太长的解决方案
intellij-idea
acaad8 小时前
Apache Poi 实现导出excel表格 合并区域边框未完全显示的问题
spring·apache·excel
王嘉俊9258 小时前
SpringBoot应用开发指南:从入门到高级配置与自动装配原理
java·spring boot·后端·spring·ssm
choice of10 小时前
SpringMVC通过注解实现全局异常处理
java·后端·spring
二掌柜,酒来!17 小时前
完美解决:应用版本更新,增加字段导致 Redis 旧数据反序列化报错
redis·spring·bootstrap