1. 程式人生 > 程式設計 >JAVA如何轉換樹結構資料程式碼例項

JAVA如何轉換樹結構資料程式碼例項

在實戰開發中經常有需要處理樹形選單、樹形目錄等等等業務需求。而對於這種產品,在設計資料庫時也建議使用id<----->parentId的結構來做。但是最終前端顯示多用hightChart或者Echart外掛來實現。所以在給前端資料時,最好的做法就是把資料庫結構話的資料處理成treeJson格式。

第一步:引入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 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,childrenFiledName);
    }
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。