为了方便浏览,代码做了很多简化,直接贴代码:
package com.mangocool.test; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JsonConfig; public class MenuPathTest { /** * 拼接菜单路径 * @param menuStr * @return */ public static String menuPath(String menuStr) { List<HashMap<String, Object>> newlist = new ArrayList<HashMap<String, Object>>(); List<HashMap<String, Object>> list = json2List(menuStr); // 全部增加一个menuPath列,后续用到 for (int i=0; i<list.size(); i++) { list.get(i).put("menuPath", list.get(i).get("menuName")); // 默认实际它有父节点。但也有异常情况,比如:虽然有parentId,但后来删除了它的父菜单 list.get(i).put("hasParent", "1"); } for (int i=0; i<list.size(); i++) { newlist.add(recursionMenu(list.get(i), list)); } return JSONArray.fromObject(newlist).toString(); } public static HashMap<String, Object> recursionMenu(HashMap<String, Object> targetMap, List<HashMap<String, Object>> srclist) { if("null".equals(targetMap.get("parentId")+"")) { return targetMap; } else { for(HashMap<String, Object> srcMap: srclist) { if((targetMap.get("parentId")+"").equals(srcMap.get("id")+"")) { targetMap.put("hasParent", "1"); targetMap.put("menuPath", srcMap.get("menuPath")+"/"+targetMap.get("menuPath")); targetMap.put("parentId", srcMap.get("parentId")+""); break; } else { // 没有父菜单,做标记 targetMap.put("hasParent", "0"); } } if("0".equals(targetMap.get("hasParent"))) { return targetMap; } return recursionMenu(targetMap, srclist); } } public static List<HashMap<String, Object>> json2List(String jsonStr) { List<HashMap<String, Object>> jsonList = new ArrayList<HashMap<String, Object>>(); JSONArray jsonArray = JSONArray.fromObject(jsonStr); HashMap<String, Object> hashMap = new HashMap<String, Object>(); JsonConfig jc = new JsonConfig(); jc.setClassMap(hashMap); jc.setRootClass(Map.class); jc.setArrayMode(JsonConfig.MODE_LIST); Collection<HashMap<String, Object>> collection = JSONArray.toCollection(jsonArray, jc); if(collection instanceof List) { jsonList = (List<HashMap<String, Object>>)collection; } return jsonList; } public static void main(String[] args) { String jsonStr = "[{\"url\": \"www.tianxin.com\",\"menuName\": \"天心区\",\"id\": 1005164,\"parentId\": 1005216},{\"url\": \"www.yuhua.com\",\"menuName\": \"雨花区\",\"id\": 1005097,\"parentId\": 1005216},{\"url\": \"www.rurong.com\",\"menuName\": \"芙蓉区\",\"id\": 1005098,\"parentId\": 1005216},{\"url\": null,\"menuName\": \"武汉市\",\"id\": 1000042,\"parentId\": 1002508},{\"url\": \"www.wuchang.com\",\"menuName\": \"南昌市\",\"id\": 1005215,\"parentId\": 1002510},{\"url\": null,\"menuName\": \"新余市\",\"id\": 1000032,\"parentId\": 1002510},{\"url\": \"www.baidu.com\",\"menuName\": \"湘潭市\",\"id\": 1000033,\"parentId\": 1002509},{\"url\": \"www.baidu.com\",\"menuName\": \"株洲市\",\"id\": 1000034,\"parentId\": 1002509},{\"url\": null,\"menuName\": \"湖南省\",\"id\": 1002509,\"parentId\": 1000854},{\"url\": null,\"menuName\": \"湖北省\",\"id\": 1002508,\"parentId\": 1000854},{\"url\": null,\"menuName\": \"江西省\",\"id\": 1002510,\"parentId\": 1000854},{\"url\": \"www.baidu.com\",\"menuName\": \"长沙市\",\"id\": 1005216,\"parentId\": 1002509},{\"url\": null,\"menuName\": \"中国\",\"id\": 1000854,\"parentId\": null},{\"url\": null,\"menuName\": \"武昌区\",\"id\": 1014581,\"parentId\": 1000042},{\"url\": \"www.baidu.com\",\"menuName\": \"汉阳区\",\"id\": 1014580,\"parentId\": 1000042}]"; System.out.println(menuPath(jsonStr)); } }
最终的结果:
[{ "id": 1005164, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省/长沙市/天心区", "url": "www.tianxin.com", "menuName": "天心区" }, { "id": 1005097, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省/长沙市/雨花区", "url": "www.yuhua.com", "menuName": "雨花区" }, { "id": 1005098, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省/长沙市/芙蓉区", "url": "www.rurong.com", "menuName": "芙蓉区" }, { "id": 1000042, "parentId": null, "hasParent": "1", "menuPath": "中国/湖北省/武汉市", "url": null, "menuName": "武汉市" }, { "id": 1005215, "parentId": null, "hasParent": "1", "menuPath": "中国/江西省/南昌市", "url": "www.wuchang.com", "menuName": "南昌市" }, { "id": 1000032, "parentId": null, "hasParent": "1", "menuPath": "中国/江西省/新余市", "url": null, "menuName": "新余市" }, { "id": 1000033, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省/湘潭市", "url": "www.baidu.com", "menuName": "湘潭市" }, { "id": 1000034, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省/株洲市", "url": "www.baidu.com", "menuName": "株洲市" }, { "id": 1002509, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省", "url": null, "menuName": "湖南省" }, { "id": 1002508, "parentId": null, "hasParent": "1", "menuPath": "中国/湖北省", "url": null, "menuName": "湖北省" }, { "id": 1002510, "parentId": null, "hasParent": "1", "menuPath": "中国/江西省", "url": null, "menuName": "江西省" }, { "id": 1005216, "parentId": null, "hasParent": "1", "menuPath": "中国/湖南省/长沙市", "url": "www.baidu.com", "menuName": "长沙市" }, { "id": 1000854, "parentId": null, "hasParent": "1", "menuPath": "中国", "url": null, "menuName": "中国" }, { "id": 1014581, "parentId": null, "hasParent": "1", "menuPath": "中国/湖北省/武汉市/武昌区", "url": null, "menuName": "武昌区" }, { "id": 1014580, "parentId": null, "hasParent": "1", "menuPath": "中国/湖北省/武汉市/汉阳区", "url": "www.baidu.com", "menuName": "汉阳区" }]
欢迎分享你的。
分享:
下一篇java.nio.charset.MalformedInputException: Input length = 1
崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。
联系QQ:58742094
联系电话:
工作邮箱:
当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!
人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。
Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号
免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。