一,数据源

1.1,数据库查出来的数据是

两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片

1.2,要求转换成的json格式的数据

1.2.1,完整数据

json省市县数据源(这是全部的数据)

1.2.2,抽取的数据

 [
     {
         "Code": "410000",
         "Name": "河南省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "郑州市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "二七区",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "中原区",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "新乡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "卫滨区",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "牧野区",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     },
     {
         "Code": "410000",
         "Name": "陕西省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "汉中市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "西乡县",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "南郑县",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "宝鸡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "岐山县",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "芙蓉县",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     }
 ]

二,转化的整体代码

2.1,代码总览

   /**
      * 查询省份城市区县
      *
      * @return
      */
     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"));

                 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);
                 }

                 String country = map.get("country");
                 Map<String, Object> provinceCityCountryMap = null;
                 if (StringUtils.isNotEmpty(country)) {
                     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);
                 } else {
                     provinceCityCountryMap = new HashMap<String, Object>();
                     provinceCityCountryList.add(provinceCityCountryMap);
                     provinceCityCountryMap.put("sort", 1);
                     provinceCityCountryMap.put("Code", "");
                     provinceCityCountryMap.put("Name", "");
                 }
             }
         }

         try {
             return JsonUtils.toJson(zoneList);
         } catch (Exception e) {
             e.printStackTrace();
         }

         return null;
     }

三,代码解析

3.1,json格式数据分析

从1.2.2的数据我们可以看到这个json所要求的数据是这个样子的

3.1.1,list

第一个大的list里面装的是34个省的对象组成的一个list集合。

3.1.2,map(对象)

每一个省中有code,和name的键值对,还有一个level的list集合

3.1.3,list

就是上面所说的level的集合,这个集合当中装的是每一个省里面的地级市的map对象

3.1.4,map(对象)

map对象里面有code,name的键值对,还有一个level的list集合,此外还有一个代表顺序的sort标示符

3.1.5,list

就是上面所说的level的集合,这个集合当中装的是每一个地级市里面装的县城的map对象

3.1.6,map(对象)

map对象里面有code,name的键值对,此外还有一个代表顺序的sort标示符,注意这个里面是没有list的集合了,因为它已经是最后一层了。

3.2,java代码分析

3.2.1,代码初步实现

根据上面的代码我们可以写出这样的代码

  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>();
         Map<String, Object> provinceMap = new HashMap<String, Object>();
         Map<String, Object> provinceCityMap = new HashMap<String, Object>();
         List<Map<String, Object>> provinceCityList = new ArrayList<Map<String, Object>>();
         List<Map<String, Object>> provinceCityCountryList = new ArrayList<Map<String, Object>>();
         Map<String, Object> provinceCityCountryMap = new HashMap<String, Object>();
         for (Map<String, String> map : mapList) {
         zoneList = new ArrayList<Map<String, Object>>();
          provinceMap = new HashMap<String, Object>();
           provinceCityMap = new HashMap<String, Object>();
             provinceMap.put("Code", map.get("provinceCode"));
             provinceCityList = new ArrayList<Map<String, Object>>();
             provinceCityCountryList = new ArrayList<Map<String, Object>>();
             provinceCityCountryMap = new HashMap<String, Object>();
             provinceMap.put("Name", map.get("province"));

provinceMap.put("level", provinceCityList);

provinceCityList.add(provinceCityMap);

provinceCityMap.put("Name", map.get("city")); provinceCityMap.put("Code", map.get("cityCode"));

provinceCityMap.put("level", provinceCityCountryList);

provinceCityCountryList.add(provinceCityCountryMap);

provinceCityCountryMap.put("Code", map.get("countryCode")); provinceCityCountryMap.put("Name", map.get("country")); zoneList.add(provinceMap); } try { return JsonUtils.toJson(zoneList); } catch (Exception e) { e.printStackTrace(); }

注意上面空开的空格是和4.2做对比用的。

3.2.2,注意点

在上面的代码中虽然provinceMap是先把provinceCityList给put进去的,但是这不影响后面provinceCityList的取值,换句话就是当执行到这句

provinceMap.put("level", provinceCityList);

代码的时候,provinceCityList是null,只到这句代码

provinceCityList.add(provinceCityMap);
provinceCityMap.put("Name", map.get("city"));
provinceCityMap.put("Code", map.get("cityCode"));

执行完之后它才有的值,但同时注意了,provinceMap里面的provinceCityList也就有了值,这是后面给它赋值的。

3.2.3,注意点升级

 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);{黑龙江省={Name=黑龙江省, Code=230000}}
                 zoneList.add(provinceMap);
             }

             provinceMap.put("Code", map.get("provinceCode"));
             provinceMap.put("Name", map.get("province"));
             注意理解上面的代码:
             是先申明了一个map,注意第一遍走的时候existMap.put(province, provinceMap);它是空的
             但是当走到provinceMap.put("Code", map.get("provinceCode"));
             provinceMap.put("Name", map.get("province"));这两行的时候它会把值给塞进去,
             这时候existMap里面有值了
             即使如果不走else里面的语句,也会把值给塞进去的。

3.2.4,问题点

假如像上面那样去解决问题的话,那么后面的代码永远会把前面的代码给覆盖掉的,

因为每一次都是new的一个对象。所以到最后上万条的数据,只会出来最后一条数据,

比如我测试的结果

 [
     {
         "Code": "310000",
         "Name": "上海市",
         "level": [
             {
                 "Code": "310100",
                 "Name": "上海市",
                 "level": [
                     {
                         "Code": "2909",
                         "Name": "长宁区"
                     }
                 ]
             }
         ]
     }
 ]

最后返回的就是这一条数据,完全不是自己要的东西。

四,解决方法

4.1,代码

和2.1的代码是一么一样的。

4.2,注意点

这句代码就是在原来的基础上加了一个existMap的双例集合

我们把2.1的代码分开来读就会更加清晰

 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);
                 }
 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"));
                 }
 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);
                 }
 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"));
                     }

4.3,解析existMap作用

因为假如现在没有这个map集合就会产生覆盖的作用,现在这个map的作用就是把取出来的值以不同的名字取出来放到map集合中来,假如下一次再去取的时候如果有就不在新建对象了,直接用原来的就行了,如果没有在建立新的对象。

这就解决了覆盖的问题。

同时也给sort排上了序号。

用下面的例子来说明

有就取原来的,没有就新建,这样的话就会把后面新的数据加到前面有的数据里面
举个例子,假如现在是河南省map1里面有name,code,和sort,leval集合,第一遍是地级市是安阳,当第二遍循环的时候,还是取省份这时候还是河南省,就不会新建一个map了,而是还是取原来的map1,这时候假如是新乡市,就会把新乡市,同样加在这个map当中,这样一个map当中就会有两个leval了
假如现在不是河南省了,而是陕西省了,就会新建一个map2,会把它里面的数据加载这个map2当中,
map1,map2装在一个list中返回,就有效的避免了第一种情况的产生了。

其中市县和上面也是同样的道理。

注意这个existMap里面装的数据会特别的多,比返回的provinceMap大了几万倍呢。

我们以上面的json的数据来手动遍历几遍。

4.3.1,首次遍历

 {
     "Code": "410000",
     "Name": "河南省",
     "level": [
         {
             "Code": "414500",
             "Name": "郑州市",
             "level": [
                 {
                     "Code": "414500",
                     "Name": "二七区",
                     "sort": 1
                 }
             ],
             "sort": 1
         }
     ]
 }

4.3.2,2遍

 {
     "Code": "410000",
     "Name": "河南省",
     "level": [
         {
             "Code": "414500",
             "Name": "郑州市",
             "level": [
                 {
                     "Code": "414500",
                     "Name": "二七区",
                     "sort": 1
                 },
                 {
                     "Code": "414500",
                     "Name": "中原区",
                     "sort": 2
                 }
             ],
             "sort": 1
         }
     ]
 }

4.3.3,3遍

 {
     "Code": "410000",
     "Name": "河南省",
     "level": [
         {
             "Code": "414500",
             "Name": "郑州市",
             "level": [
                 {
                     "Code": "414500",
                     "Name": "二七区",
                     "sort": 1
                 },
                 {
                     "Code": "414500",
                     "Name": "中原区",
                     "sort": 2
                 }
             ],
             "sort": 1
         },
         {
             "Code": "414530",
             "Name": "新乡市",
             "level": [
                 {
                     "Code": "414530",
                     "Name": "卫滨区",
                     "sort": 1
                 }
             ],
             "sort": 2
         }
     ]
 }

4.3.4,4遍

 {
     "Code": "410000",
     "Name": "河南省",
     "level": [
         {
             "Code": "414500",
             "Name": "郑州市",
             "level": [
                 {
                     "Code": "414500",
                     "Name": "二七区",
                     "sort": 1
                 },
                 {
                     "Code": "414500",
                     "Name": "中原区",
                     "sort": 2
                 }
             ],
             "sort": 1
         },
         {
             "Code": "414530",
             "Name": "新乡市",
             "level": [
                 {
                     "Code": "414530",
                     "Name": "卫滨区",
                     "sort": 1
                 },
                 {
                     "Code": "414530",
                     "Name": "牧野区",
                     "sort": 2
                 }
             ],
             "sort": 2
         }
     ]
 }

4.3.5,5遍

 [
     {
         "Code": "410000",
         "Name": "河南省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "郑州市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "二七区",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "中原区",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "新乡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "卫滨区",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "牧野区",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     },
     {
         "Code": "410000",
         "Name": "陕西省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "汉中市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "西乡县",
                         "sort": 1
                     }
                 ],
                 "sort": 1
             }
         ]
     }
 ]

4.3.6,6遍

 [
     {
         "Code": "410000",
         "Name": "河南省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "郑州市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "二七区",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "中原区",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "新乡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "卫滨区",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "牧野区",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     },
     {
         "Code": "410000",
         "Name": "陕西省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "汉中市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "西乡县",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "南郑县",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             }
         ]
     }
 ]

4.3.7,7遍

 [
     {
         "Code": "410000",
         "Name": "河南省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "郑州市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "二七区",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "中原区",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "新乡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "卫滨区",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "牧野区",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     },
     {
         "Code": "410000",
         "Name": "陕西省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "汉中市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "西乡县",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "南郑县",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "宝鸡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "岐山县",
                         "sort": 1
                     }
                 ],
                 "sort": 2
             }
         ]
     }
 ]

4.3.8,8遍

 [
     {
         "Code": "410000",
         "Name": "河南省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "郑州市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "二七区",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "中原区",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "新乡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "卫滨区",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "牧野区",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     },
     {
         "Code": "410000",
         "Name": "陕西省",
         "level": [
             {
                 "Code": "414500",
                 "Name": "汉中市",
                 "level": [
                     {
                         "Code": "414500",
                         "Name": "西乡县",
                         "sort": 1
                     },
                     {
                         "Code": "414500",
                         "Name": "南郑县",
                         "sort": 2
                     }
                 ],
                 "sort": 1
             },
             {
                 "Code": "414530",
                 "Name": "宝鸡市",
                 "level": [
                     {
                         "Code": "414530",
                         "Name": "岐山县",
                         "sort": 1
                     },
                     {
                         "Code": "414530",
                         "Name": "芙蓉县",
                         "sort": 2
                     }
                 ],
                 "sort": 2
             }
         ]
     }
 ]

致此一个流程走完就大概知道它的一个流程了。

五,优化

5.1,优化一

因为existMap数据是特别大的,所以每当我们遍历完一个省份之后就把里面的数据清除

 String province = map.get("province");
             Map<String, Object> provinceMap = null;
             if(province!=existMap.get("province")){
                 existMap.clear();
             }
             

拿这一次的取出来的province和existMap里面的province对比,假如有就继续遍历,假如没有就说明换省份了,清空exitMap,这样会提升效率。

5.2,优化二

最后一次就不用王existMap里面放值了,因为我们知道没遍历一次省市可能一样,但是县绝对是不一样的。

     String country = map.get("country");
                 Map<String, Object> provinceCityCountryMap = null;
                 if (StringUtils.isNotEmpty(country)) {

                         provinceCityCountryMap = new HashMap<String, Object>();
                         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);

5.3,优化完之后完整的代码

   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(province!=existMap.get("province")){
                 existMap.clear();
             }

             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"));

                 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);
                 }

                 String country = map.get("country");
                 Map<String, Object> provinceCityCountryMap = null;
                 if (StringUtils.isNotEmpty(country)) {

                         provinceCityCountryMap = new HashMap<String, Object>();
                         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);
                 } else {
                     provinceCityCountryMap = new HashMap<String, Object>();
                     provinceCityCountryList.add(provinceCityCountryMap);
                     provinceCityCountryMap.put("sort", 1);
                     provinceCityCountryMap.put("Code", "");
                     provinceCityCountryMap.put("Name", "");
                 }
             }
         }

         try {
             return JsonUtils.toJson(zoneList);
         } catch (Exception e) {
             e.printStackTrace();
         }

         return null;
     }
     

5.4

省市县从数据库读出来的list数据转换成json格式的数据的更多相关文章

  1. PHP将数据库的数据转换成json格式

    header('content-type:application/json;charset=utf8');  $results = array();     while ($row = mysql_f ...

  2. django-将数据库数据转换成JSON格式(ORM和SQL两种情况)

    最近打算搞一个自动化运维平台,所以在看Django的知识. 在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON.前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端 ...

  3. 数据库获取map数据后转化成json格式的数据

    一,从数据库查出来的数据 两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片 ...

  4. 数据库记录转换成json格式 (2011-03-13 19:48:37) (转)

    http://blog.sina.com.cn/s/blog_621768f30100r6v7.html 数据库记录转换成json格式 (2011-03-13 19:48:37) 转载▼ 标签: 杂谈 ...

  5. 用java代码将从数据库中取出的具有父子关系的数据转成json格式

    思路:①.取出数据中的所有父节点放入一个集合中②.取出数据中所有为该父节点的子节点放入另一个集合中③.用到迭代的方法将子节点一层一层的遍历工具类:package com.assasion.test;i ...

  6. DELPHI 把数据库中的数据转换成XML格式

    function ReplaceString(AString: string): string; begin Result := StringReplace(AString, '&', '&a ...

  7. 将 数据库中的结果集转换为json格式(三)

    从数据库中得到结果集 public String list() throws Exception { Connection con = null; PageBean pageBean = new Pa ...

  8. 读取mysql数据库的数据,转为json格式

    # coding=utf-8 ''' Created on 2016-10-26 @author: Jennifer Project:读取mysql数据库的数据,转为json格式 ''' import ...

  9. C++ OCCI API数据库操作之连接、返回查询结果集为json格式

    使用C++操作数据库,转换返回结果集为json格式,易于解析. 以下程序的编译.运行环境:Windows 10 1803.VS2017 17.5.2(vc14).解决方案配置:Release.解决方案 ...

随机推荐

  1. BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]

    题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...

  2. 51Nod 欢乐手速场1 B 序列变换[容斥原理 莫比乌斯函数]

    序列变换 alpq654321 (命题人)   基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b. lyk想知道存在多少对x,y,满足以下两个条件. 1:gcd( ...

  3. 全球(局)唯一标识符GUID的使用

    1.GUID百科介绍: 1.全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) .GUID是 ...

  4. js短路表达式

    今天碰见个题目,感觉短路表达式很好用. 题目: 定义一个计算圆面积的函数area_of_circle(),它有两个参数: r: 表示圆的半径: pi: 表示π的值,如果不传,则默认3.14 funct ...

  5. 本地Linux服务器上配置Git

    当我们需要拉取远程服务器代码到本地服务器时,我们首先要确定已经配置了正确的Git账号,可以从~/.gitconfig文件(为隐藏文件,需要使用ls -a查看),以及~/.ssh下的id_rsa.pub ...

  6. scala学习

    前言 Bruce Eckel在吐槽Java,一是本身的不合理的地方太多,二是Oracle的商业目的导致Java的发布显得有点仓促,许多地方存在不合理,这样便加速了Java的不合理.此外,Bruce提到 ...

  7. 配置python虚拟环境Virtualenv及pyenv

    pyenv pyenv 可以让机器安装各种不同版本的python pyenv install --list 查看可以安装的python版本 pyenv versions 查看已安装的python版本 ...

  8. iOS "此证书由未知颁发机构签名"此问题的解决方法

    前段时间制作证书时把以前钥匙串中的证书全删除了,然后在制作新证书的时候就出现了"此证书由未知颁发机构签名"的红色警告,通过查找资料发现出现此问题的原因是:我把钥匙串中的此证书给删除 ...

  9. 基于Parallax设计HTML视差效果

    年关将至,给大家拜年. 最近时间充裕了一点,给大家介绍一个比较有意思的控件:Parallax.它可以用来实现鼠标移动时,页面上的元素也做偏移的视差效果.在一些有表现层次,布局空旷的页面上,用来做Hea ...

  10. HTTP协议学习笔记

    一.什么是HTTP协议 HTTP协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器 ...