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

目录
相关文章
|
7天前
|
前端开发 JavaScript Java
Java中将图片转换为base64格式的技巧
这样,你就可以在Java中将图片转换为Base64格式了。这个方法的实现非常简单,只需要使用Java的内置库,无需任何额外的库。希望这个方法对你有所帮助。
64 22
|
1月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
|
4月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
150 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
5月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
667 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
6月前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
256 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
5月前
|
Java
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
146 0
|
6月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
527 0
在Java中处理JSON数据:Jackson与Gson库比较
|
6月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
363 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
6月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
42 1
|
6月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
195 1
下一篇
oss创建bucket