Java json转树

1.工具类

package com.xiaolc.util;

import com.xiaolc.model.Menu;

import java.util.*;

/**
 * @author lc
 * @Date: 2019/1/3 13:44
 * json树工具类
 */
public class JsonTree {
                                        //需要替换
    public List<Menu> findTree(List<Menu> allMenu) {
        Map<String, Object> data = new HashMap<String, Object>();
        try {//查询所有菜单
            //List<Menu> allMenu = service.findAll();
            //根节点
            List<Menu> rootMenu = new ArrayList<Menu>();
            for (Menu nav : allMenu) {
                if (nav.getParentId().equals("0")) {//父节点是0的,为根节点。
                    rootMenu.add(nav);
                }
            }
            /* 根据Menu类的order排序 */
            //Collections.sort(rootMenu, order());
            //为根菜单设置子菜单,getClild是递归调用的
            for (Menu nav : rootMenu) {
                /* 获取根节点下的所有子节点 使用getChild方法*/
                List<Menu> childList = getChild(nav.getClassId(), allMenu);
                nav.setChildren(childList);//给根节点设置子节点
            }
            /**
             * 输出构建好的菜单数据。
             *
             */
            //data.put("success", "true");
            //data.put("data", rootMenu);
            return rootMenu;
        } catch (Exception e) {
            //data.put("success", "false");
            //data.put("data", new ArrayList());
            return null;
        }
    }

    /*
     * 排序,根据order排序
     */
   /* public Comparator<Menu> order() {
        Comparator<Menu> comparator = new Comparator<Menu>() {
            @Override
            public int compare(Menu o1, Menu o2) {
                if (o1.getOrder() != o2.getOrder()) {
                    return o1.getOrder() - o2.getOrder();
                }
                return 0;
            }
        };
        return comparator;
    }
*/
    /**
     * 获取子节点
     *
     * @param id      父节点id
     * @param allMenu 所有菜单列表
     * @return 每个根节点下,所有子菜单列表
     */
    public List<Menu> getChild(String id, List<Menu> allMenu) {
        //子菜单
        List<Menu> childList = new ArrayList<Menu>();
        for (Menu nav : allMenu) {
            // 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
            //相等说明:为该根节点的子节点。
            if (nav.getParentId().equals(id)) {
                childList.add(nav);
            }
        }
        //递归
        for (Menu nav : childList) {
            nav.setChildren(getChild(nav.getClassId(), allMenu));
        }
        //Collections.sort(childList, order());//排序
        //如果节点下没有子节点,返回一个空List(递归退出)
        if (childList.size() == 0) {
            return new ArrayList<Menu>();
        }
        return childList;
    }
}

2.controller

 @GetMapping("abc")
    public JSONResponse abc() {
        List<Menu> all = service.findAll();
        JsonTree jsonTree = new JsonTree();
        List<Menu> tree = jsonTree.findTree(all);
        return ResultUtil.success("", tree);
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是将Java中的List换为JSON结构的示例代码: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.List; public class ListToJSONTree { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); // 创建一个List,用于模拟数据 List<Node> nodeList = List.of( new Node(1, "root", null), new Node(2, "node1", 1), new Node(3, "node2", 1), new Node(4, "node3", 2), new Node(5, "node4", 3) ); // 将List换为JSON结构 ArrayNode rootNode = objectMapper.createArrayNode(); for (Node node : nodeList) { ObjectNode nodeObject = objectMapper.createObjectNode(); nodeObject.put("id", node.getId()); nodeObject.put("name", node.getName()); nodeObject.put("parentId", node.getParentId()); addChildNode(rootNode, nodeObject, node.getParentId()); } // 输出换后的JSON结构 System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode)); } private static void addChildNode(ArrayNode rootNode, ObjectNode nodeObject, Integer parentId) { for (int i = 0; i < rootNode.size(); i++) { ObjectNode parentObject = (ObjectNode) rootNode.get(i); if (parentObject.get("id").asInt() == parentId) { if (!parentObject.has("children")) { parentObject.putArray("children"); } ArrayNode childrenArray = (ArrayNode) parentObject.get("children"); childrenArray.add(nodeObject); return; } else if (parentObject.has("children")) { addChildNode((ArrayNode) parentObject.get("children"), nodeObject, parentId); } } } static class Node { private final Integer id; private final String name; private final Integer parentId; public Node(Integer id, String name, Integer parentId) { this.id = id; this.name = name; this.parentId = parentId; } public Integer getId() { return id; } public String getName() { return name; } public Integer getParentId() { return parentId; } } } ``` 这个例子中,我们通过创建一个List来模拟数据,然后将这个List换为JSON结构。在换的过程中,我们使用了Jackson库来进行JSON的序列化和反序列化。我们使用ObjectMapper来创建JSON对象和数组,使用ObjectNode和ArrayNode来表示JSON对象和数组。我们遍历List中的每一个元素,将其换为JSON对象,并且添加到相应的父节点下。在添加子节点时,我们使用递归函数addChildNode来遍历JSON结构,找到相应的父节点并添加子节点。最后,我们使用ObjectMapper将JSON结构换为字符串,并且输出到控制台上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Insist_on_progress

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值