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);
            }
        }
    

    赵小胖个人博客

  • 相关阅读:
    java常见排序算法选择排序、冒泡排序、插入排序分析与比较
    使用SqlBulkCopy批量插入或迁移数据(转)
    用ADO.Net实现Oracle大批量数据更新优化(转)
    MSSQL 查询优化(转)
    .net的dataset,datatable,object等对象转json方法
    VS2005中的水晶报表也可以用推模式动态绑定数据源
    web项目经理手册开发时间估算
    Ajax:拥抱JSON,让XML走开
    (转)我国IT行业“项目经理制”现状
    转:web项目经理手册风险管理
  • 原文地址:https://www.cnblogs.com/Sky0914/p/12548368.html
Copyright © 2011-2022 走看看