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

news2024/10/30 19:16:29

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2228202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑使用技巧:怎么清理C盘碎片?

在日常使用电脑的过程中&#xff0c;C盘作为系统盘&#xff0c;常常会因为各种文件、缓存、临时文件等的堆积而变得拥挤不堪。这不仅会降低电脑的运行速度&#xff0c;还可能导致系统不稳定。而磁盘碎片问题则是另一个影响电脑性能的重要因素。本文将详细介绍如何清理C盘碎片&a…

数据结构 ——— 二叉树的概念及结构

目录 二叉树的概念 特殊的二叉树 一、满二叉树 二、完全二叉树 二叉树的概念 二叉树树示意图&#xff1a; 从以上二叉树示意图可以看出&#xff1a; 二叉树每个节点的度不大于 2 &#xff0c;那么整个二叉树的度也不大于 2 &#xff0c;但是也不是每个节点都必须有 2 个…

什么样的职业适合参加TRIZ创新方法培训

当下&#xff0c;无论是科技巨头还是初创企业&#xff0c;甚至是传统行业&#xff0c;都在积极寻求创新的突破口&#xff0c;以期在激烈的市场竞争中脱颖而出。而在这场创新大潮中&#xff0c;TRIZ&#xff08;发明问题解决理论&#xff09;作为一种高效、系统的创新方法&#…

SQLark百灵连接——整合项目监控过程

关键词&#xff1a;SQL编写、数据查询、数据导入、达梦数据库、项目管理、信息透明 项目监控背景 作为新手项目经理的我&#xff0c;经常觉得哪儿哪儿都是问题&#xff0c;今天催这个&#xff0c;明天推那个&#xff0c;可就是什么事都推不动&#xff0c;谁都不配合。后来&…

Unity可视化Shader工具ASE介绍——自定义函数

阿赵的Unity可视化Shader工具ASE介绍目录   大家好&#xff0c;我是阿赵。   之前介绍过一些ASE的用法&#xff0c;发现漏了一个比较重要的&#xff0c;自定义函数的使用。这里补充一下。 一、 使用的场合 在使用ASE制作Shader的过程中&#xff0c;可能会遇到以下这些情况…

前端性能优化——缓存优化

前端性能优化可以从多个方面下手&#xff0c;例如加载性能优化、渲染性能优化、代码优化、缓存优化、性能监测和优化等方面下手&#xff0c;下面针对缓存优化分享一下优化思路。 浏览器缓存主要分为强缓存和协商缓存。强缓存命中时&#xff0c;浏览器直接从本地缓存中获取资源&…

Unity3D包管理bug某些版本Fbx Exporter插件无法搜索到的问题

这个问题是在使用unity的时候发现的 有些版本里没有Fbx Exporter插件也是没法搜到 经过测试&#xff0c;在package manager中开启Enable Preview Packages也没有用 这个插件在2020已经是正式版了&#xff0c;不需要再开启 后来发现可能是版本bug 需要手动开启 在工程的Pac…

03.DDD六边形架构

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 什么是依赖DDD四层架构六边形架构代码实现 想要详细了解六边形架构&#xff0c;可以看我之前的一篇文章。是对六边形架构原文的翻…

Android启动流程_Zygote阶段

前言 上一篇文档中我们描述了 Android 启动中的 init 启动部分&#xff0c;本片文档将会继续 Android 启动流程的逻辑&#xff0c;继续梳理 Zygote 部分功能。 说明框架 对于 Zygote 进程&#xff0c;要从以下框架说明&#xff1a; 第一点&#xff0c;编译&#xff0c;zygo…

最新AI软件部署,ChatGPT商业AI系统源码,支持GPT4.0+AI换脸+AI智能体GPTs应用+AI绘画+AI视频+文档分析

一、前言 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能问答和绘画系统&#xff0c;提供一站式 AI B/C 端解决方案&#xff0c;AI大模型提问、AI绘画、专业版AI视频生成、文档分析、多模态识图理解、TTS & 语音识别对话、AI换脸、支持AI智能体应用&#xff08;…

C++ | Leetcode C++题解之第514题自由之路

题目&#xff1a; 题解&#xff1a; class Solution { public:int findRotateSteps(string ring, string key) {int n ring.size(), m key.size();vector<int> pos[26];for (int i 0; i < n; i) {pos[ring[i] - a].push_back(i);}vector<vector<int>>…

联想笔记本电脑睡眠后打开黑屏解决方法

下载联想机器睡眠无法唤醒修复工具 下载地址&#xff1a;https://tools.lenovo.com.cn/exeTools/detail/id/233/rid/6182522.html 使用完后重启电脑&#xff0c;问题解决。

应用案例 | Panorama SCADA助力巴黎奥运会:保障赛事协调与安全

谈到2024年最受关注的体育盛事&#xff0c;巴黎奥运会无疑是焦点之一。作为全球瞩目的顶级赛事&#xff0c;它不仅汇集了来自世界各地的精英运动员&#xff0c;还点燃了全球观众的热情。然而&#xff0c;组织如此大规模的活动绝非易事。从大量游客通过公共交通涌入&#xff0c;…

Flux-IP-Adapter-V2版本发布,效果实测!是惊喜还是意外?

更多AI教程&#xff1a;AI教程_深度学习入门指南 - 站长素材 简介 XLAB团队发布了FLUX.1-dev模型的最新IP-Adapter V2版本。这是在之前IP-Adapter V1版本上的进一步升级。新版本的IP-Adapter模型在保持图像纵横比的同时&#xff0c;分别在512x512分辨率下训练了150k步&#x…

【计算机网络教程】课程 章节测试1 计算机网络概述

一. 单选题&#xff08;共16题&#xff09; 1 【单选题】以下关于TCP/IP参考模型缺点的描述中&#xff0c;错误的是&#xff08; &#xff09;。 A、在服务、接口与协议的区别上不很清楚 B、网络接口层本身并不是实际的一层 C、它不能区分数据链路和物理层 D、传输层对…

超出人类思维的「系统0」:AI正在创造一种新的思维方式吗?

在大众的认知中&#xff0c;人类的思维分为系统 1&#xff08;System 1&#xff0c;直觉的、快速的、无意识的、自动思考&#xff09;和系统 2&#xff08;System 2&#xff0c;有逻辑的、缓慢的、有意识的、计划和推理&#xff09;。 如今&#xff0c;一种不同于 System 1 和…

袋鼠云秋季发布会圆满落幕,AI驱动让生产力数智化

在当今时代&#xff0c;AI 的发展如汹涌浪潮&#xff0c;其速度之快超越了任何历史时期。它以前所未有的迅猛之势&#xff0c;渗入到各个领域的不同场景之中&#xff0c;悄然重塑着商业模式与人们的生活方式。 在 AI 逐渐成为企业基础属性的背景下&#xff0c;袋鼠云举办秋季发…

linux 高级 I/O

高级 I/O 1. 阻塞 I/O 与非阻塞 I/O2. 阻塞 I/O 所带来的困境3. 何为 I/O 多路复用以及原理select()函数介绍poll()函数介绍总结 4. 何为异步 I/O 以及原理5. 存储映射 I/O7. 文件加锁 1. 阻塞 I/O 与非阻塞 I/O 这里举个例子&#xff0c;譬如对于某些文件类型&#xff08;读管…

centos7配置keepalive+lvs

拓扑图 用户访问www.abc.com解析到10.4.7.8&#xff0c;防火墙做DNAT将访问10.4.7.8:80的请求转换到VIP 172.16.10.7:80&#xff0c;负载均衡器再将请求转发到后端web服务器。 实验环境 VIP&#xff1a;负载均衡服务器的虚拟ip地址 LB &#xff1a;负载均衡服务器 realserv…

【亚马逊云科技】Amazon Bedrock搭建AI服务

前言 大模型应用发展迅速&#xff0c;部署一套AI应用的需求也越来越多&#xff0c;从头部署花费时间太长&#xff0c;然而亚马逊科技全托管式生成式 AI 服务 Amazon Bedrock&#xff0c;Amazon Bedrock 简化了从基础模型到生成式AI应用构建的复杂流程&#xff0c;为客户铺设了…