一,从数据库查出来的数据
两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片
二,要求的json格式的数据
三,实现的关键代码
public String queryFullZoneInfo() { List<Map<String, String>> mapList = zoneInfoService.queryFullZoneInfo(); List<Map<String, Object>> zoneList = new ArrayList<Map<String, Object>>(); Map<String, Object> existMap = new HashMap<String, Object>(); for (Map<String, String> map : mapList) { String province = map.get("province"); Map<String, Object> provinceMap = null; if (existMap.containsKey(province)) { provinceMap = (Map<String, Object>) existMap.get(province); } else { provinceMap = new HashMap<String, Object>(); existMap.put(province, provinceMap); zoneList.add(provinceMap); } provinceMap.put("Code", map.get("provinceCode")); provinceMap.put("Name", map.get("province")); String city = map.get("city"); if (StringUtils.isNotEmpty(city)) { List<Map<String, Object>> provinceCityList = null; if (existMap.containsKey(province + "_")) { provinceCityList = (List<Map<String, Object>>) existMap.get(province + "_"); } else { provinceCityList = new ArrayList<Map<String, Object>>(); existMap.put(province + "_", provinceCityList); provinceMap.put("level", provinceCityList); } Map<String, Object> provinceCityMap = null; if (existMap.containsKey(province + "_" + city)) { provinceCityMap = (Map<String, Object>) existMap.get(province + "_" + city); } else { provinceCityMap = new HashMap<String, Object>(); existMap.put(province + "_" + city, provinceCityMap); provinceCityList.add(provinceCityMap); String citySort = String.valueOf(existMap.get(province + "_sort")); existMap.put(province + "_sort", "null".equals(citySort) ? 1 : NumberUtils.toInt(citySort) + 1); provinceCityMap.put("sort", existMap.get(province + "_sort")); } provinceCityMap.put("Name", city); provinceCityMap.put("Code", map.get("cityCode")); String country = map.get("country"); if (StringUtils.isNotEmpty(country)) { List<Map<String, Object>> provinceCityCountryList = null; if (existMap.containsKey(province + "_" + city + "_")) { provinceCityCountryList = (List<Map<String, Object>>) existMap.get(province + "_" + city + "_"); } else { provinceCityCountryList = new ArrayList<Map<String, Object>>(); existMap.put(province + "_" + city + "_", provinceCityCountryList); provinceCityMap.put("level", provinceCityCountryList); } Map<String, Object> provinceCityCountryMap = null; if (existMap.containsKey(province + "_" + city + "_" + country)) { provinceCityCountryMap = (Map<String, Object>) existMap.get(province + "_" + city + "_" + country); } else { provinceCityCountryMap = new HashMap<String, Object>(); existMap.put(province + "_" + city + "_" + country, provinceCityCountryMap); provinceCityCountryList.add(provinceCityCountryMap); String countrySort = String.valueOf(existMap.get(province + "_" + city + "_sort")); existMap.put(province + "_" + city + "_sort", "null".equals(countrySort) ? 1 : NumberUtils.toInt(countrySort) + 1); provinceCityCountryMap.put("sort", existMap.get(province + "_" + city + "_sort")); } provinceCityCountryMap.put("Code", map.get("countryCode")); provinceCityCountryMap.put("Name", country); } } } try { return JsonUtils.toJson(zoneList); } catch (Exception e) { e.printStackTrace(); } return null; }