实体类:
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;
	}

}

数据输出:

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