zoukankan      html  css  js  c++  java
  • JAVA 转换 树结构数据

    JAVA 转换 树结构数据

    第一步:引入fastjson

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>${fastjson.version}</version>
    </dependency>
    

    第二步:用到了工具内的JSONPath

    JSONPath使用教程

        /**
         * 树转换
         *
         * @param obj                  需要转换的对象
         * @param parentCodeFieldName  父标识字段名
         * @param parentCode           父标识值
         * @param currentCodeFieldName 当前标识字段名
         * @param childrenFiledName    子树的字段名
         * @param c                    需要转换的Class类型
         * @param <T>                  泛型
         * @return 返回List<T>
         */
        public static <T> List<T> tree(Object obj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName, Class<T> c) {
            long t1 = System.currentTimeMillis();
            String jsonStr = JSON.toJSONString(obj);
            log.debug("树转换开始 >>>>>>>>>>>>>>>> {}", JSON.toJSONString(obj));
            //获取第一层级的数据
            JSONArray jsonArray = (JSONArray) JSONPath.read(jsonStr, "$[" + parentCodeFieldName + "=" + parentCode + "]");
            if (CollectionUtils.isEmpty(jsonArray)) {
                //为空的话直接返回空集合
                return Lists.newArrayList();
            }
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String code = jsonObject.getString(currentCodeFieldName);
                treeChildren(jsonStr, jsonObject, parentCodeFieldName, code, currentCodeFieldName, childrenFiledName);
            }
            List<T> list = JSONArray.parseArray(jsonArray.toString(), c);
            log.debug("树转换结束, 转换时间: {} ms . >>>>>>>>>>>>>>>> {}", (System.currentTimeMillis() - t1), JSON.toJSONString(list));
            return list;
        }
    
        private static void treeChildren(String jsonStr, JSONObject currentJsonObj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName) {
            JSONArray jsonArray = (JSONArray) JSONPath.read(jsonStr, "$[" + parentCodeFieldName + "=" + parentCode + "]");
            if (CollectionUtils.isEmpty(jsonArray)) {
                return;
            }
            currentJsonObj.put(childrenFiledName, jsonArray);
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String code = jsonObject.getString(currentCodeFieldName);
                treeChildren(jsonStr, jsonObject, parentCodeFieldName, code, currentCodeFieldName, childrenFiledName);
            }
        }
    

    赵小胖个人博客

  • 相关阅读:
    【引用】webkit内核浏览器支持的特殊CSS样式和CSS3.0
    catalina.home catalina.base 定义 位子 位置
    gvim 启动 全屏
    Log4j 配置文件(log4j.properties)的所在路径问题(转)
    ie6 div height bug css注意点(转)
    【引用】jdbc.properties 包含多种数据库驱动链接版本
    【引用】ActionContext和ServletActionContext介绍
    【引用】在Eclipse中将java Project转换成Dynamic Web Project
    flex查询xml字段绑定DataGrid小结
    Jquery 每天记一点200972
  • 原文地址:https://www.cnblogs.com/Sky0914/p/12548368.html
Copyright © 2011-2022 走看看