在實(shí)戰(zhàn)開發(fā)中經(jīng)常有需要處理樹形菜單、樹形目錄等等等業(yè)務(wù)需求。而對(duì)于這種產(chǎn)品,在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)也建議使用id<----->parentId的結(jié)構(gòu)來做。但是最終前端顯示多用hightChart或者Echart插件來實(shí)現(xiàn)。所以在給前端數(shù)據(jù)時(shí),最好的做法就是把數(shù)據(jù)庫(kù)結(jié)構(gòu)話的數(shù)據(jù)處理成treeJson格式。
銅陵網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,銅陵網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為銅陵上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的銅陵做網(wǎng)站的公司定做!
第一步:引入fastjson
com.alibaba fastjson ${fastjson.version}
第二步:用到了工具內(nèi)的JSONPath
JSONPath使用教程
/** * 樹轉(zhuǎn)換 * * @param obj 需要轉(zhuǎn)換的對(duì)象 * @param parentCodeFieldName 父標(biāo)識(shí)字段名 * @param parentCode 父標(biāo)識(shí)值 * @param currentCodeFieldName 當(dāng)前標(biāo)識(shí)字段名 * @param childrenFiledName 子樹的字段名 * @param c 需要轉(zhuǎn)換的Class類型 * @param泛型 * @return 返回List */ public static List tree(Object obj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName, Class c) { long t1 = System.currentTimeMillis(); String jsonStr = JSON.toJSONString(obj); log.debug("樹轉(zhuǎn)換開始 >>>>>>>>>>>>>>>> {}", JSON.toJSONString(obj)); //獲取第一層級(jí)的數(shù)據(jù) 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 list = JSONArray.parseArray(jsonArray.toString(), c); log.debug("樹轉(zhuǎn)換結(jié)束, 轉(zhuǎn)換時(shí)間: {} 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); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。