java 树形转换JSON 工具类 / 树形子父级菜单递归 JSON 格式

简介: java 树形转换JSON 工具类 / 树形子父级菜单递归 JSON 格式

实体类:
package tree;
import java.util.List;
/**
 *
 *  2018-11-30
 */
public class Menu {
    // 菜单id
    private String id;
    // 菜单名称
    private String name;
    // 父菜单id
    private String parentId;
    // 菜单url
    private String url;
    // 菜单图标
    private String icon;
    // 菜单顺序
    private int order;
    // 子菜单
    private List<Menu> childMenus;
  public Menu(String id, String name, String parentId) {
    super();
    this.id = id;
    this.name = name;
    this.parentId = parentId;
  }
  @Override
  public String toString() {
    return "Menu [id=" + id + ", name=" + name + ", parentId=" + parentId
        + ", url=" + url + ", icon=" + icon + ", order=" + order
        + ", childMenus=" + childMenus + "]";
  }
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getParentId() {
    return parentId;
  }
  public void setParentId(String parentId) {
    this.parentId = parentId;
  }
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public String getIcon() {
    return icon;
  }
  public void setIcon(String icon) {
    this.icon = icon;
  }
  public int getOrder() {
    return order;
  }
  public void setOrder(int order) {
    this.order = order;
  }
  public List<Menu> getChildMenus() {
    return childMenus;
  }
  public void setChildMenus(List<Menu> childMenus) {
    this.childMenus = childMenus;
  }
}

以下为工具类:

package com.aqueduct.base.common.util;

import java.util.ArrayList; import java.util.HashMap; import

java.util.List; import java.util.Map;

import javax.annotation.Resource;

import com.alibaba.fastjson.JSON; import

com.aqueduct.base.entity.system.Menu; import

com.aqueduct.base.service.system.menu.MenuManager;

public class ZTreeInit{
  @Resource(name="menuService")
  private static MenuManager menuService;

/** * 初始化数据 * * @return */

public static List<Menu> initData(){
  List<Menu> treeData = new ArrayList<Menu>();
  treeData.add(new Menu("1","1","0"));
  treeData.add(new Menu("2","2","1"));
  treeData.add(new Menu("3","3","1"));
  treeData.add(new Menu("4","4","2"));
  treeData.add(new Menu("5","5","0"));
  treeData.add(new Menu("6","6","2"));
  treeData.add(new Menu("7","7","2"));
  treeData.add(new Menu("8","8","3"));
  treeData.add(new Menu("9","9","10"));
  treeData.add(new Menu("10","10","6"));
  treeData.add(new Menu("11","11","7"));
  return treeData;
}

/** * 子菜单递归 * * @param id * @param rootMenu * @return */

public static List<Menu> getChild(String id, List<Menu> rootMenu) {
  // 子菜单
  List<Menu> childList = new ArrayList<>();
  for (Menu menu : rootMenu) {
    // 遍历所有节点,将父菜单id与传过来的id比较
    if (menu.getPARENT_ID().equals(id)) {
      childList.add(menu);
    }
  }
  // 把子菜单的子菜单再循环一遍
  for (Menu menu : childList) {
    menu.setSubMenu(getChild(menu.getMENU_ID(), rootMenu));// 递归
  }
  // 判断递归结束
  if (childList.size() == 0) {
    return null;
  }
  return childList;
}

/** * @param args * @throws Exception */

  public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    List<Menu> treeData = menuService.listAllMenuQx("0");//获取所有菜单; // 原始数据
    // 查看结果
    for (Menu menu : treeData) {
//       System.out.println(menu.toString());
    }
    List<Menu> menuList = new ArrayList<Menu>(); // 树递归
    // 先找到所有的一级菜单
    for (int i = 0; i < treeData.size(); i++) {
      // 一级菜单父ID为0
      if (treeData.get(i).getPARENT_ID().equals("0")) {
        menuList.add(treeData.get(i));
      }
    }
    // 为一级菜单设置子菜单,getChild是递归调用的
    for (Menu menu : menuList) {
      menu.setSubMenu(getChild(menu.getMENU_ID(), treeData));
    }
    Map<String, Object> jsonMap = new HashMap<String, Object>();
    jsonMap.put("menu", menuList);
    System.out.println(JSON.toJSONString(menuList));
//    buildMenu(menuList);
//    System.out.println(str);
  }

/** * 遍历菜单 * * @param arr * @return */

  public static String str = "";
  public static String buildMenu(List<Menu> arr) {
    for (int i = 0; i < arr.size(); i++) {
      /*str += "<li>";
      str += "<a href='javascript:;'>" + "<cite>"
          + arr.get(i).getMENU_NAME() + "</cite>"
          + "<i class='iconfont nav_right'>"
          + arr.get(i).getMENU_ICON() + "</i>" + "</a>";*/
      // 存在子菜单 递归
      if (arr.get(i).getSubMenu() != null
          && arr.get(i).getSubMenu().size() > 0) {
//        str += "<ul>";
        buildMenu(arr.get(i).getSubMenu()); // 递归
//        str += "</ul>";
      }
      /*str += "</li>";*/
    }
    return str;
  }
}

数据输出:

47032dbf03ee8bdabd16c7705dec17b.png

目录
相关文章
|
11月前
|
JSON 前端开发 应用服务中间件
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据的方案
最后,记得在任何生产环境部署之前,进行透彻测试以确保一切运转如预期。遵循这些战术,守卫你的网络城堡不再是难题。
424 3
|
前端开发 JavaScript Java
Java中将图片转换为base64格式的技巧
这样,你就可以在Java中将图片转换为Base64格式了。这个方法的实现非常简单,只需要使用Java的内置库,无需任何额外的库。希望这个方法对你有所帮助。
817 22
|
JSON 人工智能 算法
探索大型语言模型LLM推理全阶段的JSON格式输出限制方法
本篇文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
2237 48
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
3362 52
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
820 2
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
155 1
java基础(11)函数重载以及函数递归求和
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
585 3
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
775 1