JAVA 轉換 樹結構數據

JAVA 轉換 樹結構數據

第一步:引入fastjson

<code><dependency>
<groupid>com.alibaba/<groupid>
<artifactid>fastjson/<artifactid>
<version>${fastjson.version}/<version>
/<dependency>/<code>

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

JSONPath使用教程

<code>    /**
* 樹轉換
*
* @param obj 需要轉換的對象
* @param parentCodeFieldName 父標識字段名
* @param parentCode 父標識值
* @param currentCodeFieldName 當前標識字段名
* @param childrenFiledName 子樹的字段名
* @param c 需要轉換的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("樹轉換開始 >>>>>>>>>>>>>>>> {}", 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 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);
}
}
/<code>

趙小胖個人博客


分享到:


相關文章: