<span>【实用场景】Java转换普通JSON为树JSON</span>

在实际开发中可能会遇到树状JSON的场景,比如省市县区这类的组织机构,数据库存在一般都是关联关系,如果递归查询性能一般会比较慢,可以考虑将查询出的数据在内存中进行转换,也不失为一种方法。

package com.xxx.xxx.elearning.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.muyuan.platform.elearning.entity.TreeNode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName JsonUtils
 * @Description
 * @Author Vincente
 * @Date 2020/6/5 9:41
 **/
@Slf4j
public class JsonUtils {

    /**
     * 获取单个对象
     *
     * @param meta
     * @return
     */
    public static <T> T getPage(String meta, Class<T> clazz) {
        if (StringUtils.isEmpty(meta)) {
            return null;
        }
        return JSONObject.parseObject(meta, clazz);
    }

    /**
     * 获取List集合
     *
     * @param data
     * @return
     */
    public static <T> List<T> getDataVOList(String data, Class<T> clazz) {
        if (StringUtils.isEmpty(data)) {
            return null;
        }
        return JSONArray.parseArray(data, clazz);
    }

    /**
     * 普通json转为树状json
     *
     * @param array
     * @param id
     * @param pid   父ID
     * @param child 子节点名称
     * @return
     */
    public static String toJsonTree(JSONArray array, String id, String pid, String child) {
        JSONArray arr = new JSONArray();
        JSONObject obj = new JSONObject();
        for (int i = 0; i < array.size(); i++) {
            JSONObject json = (JSONObject) array.get(i);
            obj.put(json.getString(id), json);
        }
        //遍历结果集
        for (int j = 0; j < array.size(); j++) {
            JSONObject jsonObject = (JSONObject) array.get(j);
            JSONObject jObj = (JSONObject) obj.get(jsonObject.get(pid).toString());
            if (jObj != null) {
                if (jObj.get(child) != null) {
                    JSONArray r = (JSONArray) jObj.get(child);
                    r.add(jsonObject);
                    jObj.put(child, r);
                } else {
                    JSONArray ch = new JSONArray();
                    ch.add(jsonObject);
                    jObj.put(child, ch);
                }
            } else {
                arr.add(jsonObject);
            }
        }
        return JSONObject.toJSONString(arr);
    }

    /**
     * 根据父节点获取所有子节点
     * add by Vincente
     *
     * @param pid
     * @param nodeList
     * @return
     */
    public static List<TreeNode> getChildren(String pid, List<TreeNode> nodeList) {
        List<TreeNode> resultList = new ArrayList<>();
        if (null != nodeList && nodeList.size() > 0) {
            try {
                for (TreeNode node : nodeList) {
                    if (pid.equals(node.getParentid())) {
                        if (!node.getId().equals("17169")) {
                            List<TreeNode> children = getChildren(node.getId(), nodeList);
                            if (children.size() == 0) {
                                node.setLeaf(true);
                            }
                            resultList.add(node);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return resultList;
    }
}

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
2022-12-16 14:39
门头沟学院_2024
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议