处理 区域代码,转成json格式,例如2017年最新的区域代码http://www.mca.gov.cn/article/sj/tjbz/a/2017/20178/201709251028.html
注意4大直辖市处理不了,需要手动增加一行例如110100 北京市。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.ysccc.spring.boot.tools.Emptys;
public class AreaCodeConvert {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
// 到政府网站复制列表,保存到txt中,我找到的2017年的
// http://www.mca.gov.cn/article/sj/tjbz/a/2017/20178/201709251028.html
// 直辖市和特别行政区比较讨厌,只有省的数据,没有市,或者没有区县,自己手动添加
// 需要手动添加的有:北京,天津,上海,重庆,台湾,香港,澳门
File f = new File("D:\\areaCode.txt");
// 注意转码
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(f), "GBK"));
String l = null;
Map<String, Object> map = Maps.newLinkedHashMap();
while ((l = r.readLine()) != null) {
boolean isProvince = false, isCity = false, isRegion = false;
// 左代码,右名称
String[] split = StringUtils.split(l);
String code = split[0];
String name = split[1];
// 代码规律:省级的都是xx0000,市级都是xxyy00
isProvince = "0000".equals(StringUtils.substring(code, 2, 6));
if (!isProvince) {
isCity = "00".equals(StringUtils.substring(code, 4, 6));
}
if (!isCity) {
isRegion = true;
}
if (isProvince) {
// 存省级
Map<String, Object> pMap = Maps.newLinkedHashMap();
map.put(StringUtils.substring(code, 0, 2), pMap);
pMap.put("code", code);
pMap.put("name", name);
} else if (isCity) {
// 市级存到升级的children中
Map<String, Object> pMap = (Map<String, Object>) map.get(StringUtils.substring(code, 0, 2));
Map<String, Object> cMap = (Map<String, Object>) pMap.get("children");
if (cMap == null) {
cMap = Maps.newLinkedHashMap();
pMap.put("children", cMap);
}
Map<String, Object> ccMap = Maps.newLinkedHashMap();
cMap.put(StringUtils.substring(code, 0, 4), ccMap);
ccMap.put("code", code);
ccMap.put("pCode", StringUtils.substring(code, 0, 2) + "0000");
ccMap.put("name", name);
} else if (isRegion) {
// 区级存到市级的children中
Map<String, Object> pMap = (Map<String, Object>) map.get(StringUtils.substring(code, 0, 2));
Map<String, Object> cMap = (Map<String, Object>) pMap.get("children");
Map<String, Object> ccMap = (Map<String, Object>) cMap.get(StringUtils.substring(code, 0, 4));
// 坑爹的情况是有些是县级市,有些没有对应市的县,不过根据列表发现只是找到上一个就好了
if (ccMap == null) {
List<Entry<String, Object>> cList = new ArrayList<Entry<String, Object>>(cMap.entrySet());
ccMap = (Map<String, Object>) cList.get(cList.size() - 1).getValue();
}
List<Map<String, Object>> rList = (List<Map<String, Object>>) ccMap.get("children");
if (rList == null) {
rList = Lists.newArrayList();
ccMap.put("children", rList);
}
Map<String, Object> rMap = Maps.newLinkedHashMap();
rMap.put("code", code);
rMap.put("pCode", StringUtils.substring(code, 0, 4) + "00");
rMap.put("name", name);
rList.add(rMap);
}
}
// Map不好看,转成List格式的
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>((Collection<? extends Map<String, Object>>) map.values());
for (Map<String, Object> m : result) {
Map<String, Object> c = (Map<String, Object>) m.get("children");
if (Emptys.isNotEmpty(c)) {// 台湾、香港、澳门就一个地方
m.put("children", new ArrayList<Map<String, Object>>((Collection<? extends Map<String, Object>>) c.values()));
}
}
ObjectMapper jsonMapper = new ObjectMapper();
jsonMapper.setSerializationInclusion(Include.NON_DEFAULT);
jsonMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
System.out.println(jsonMapper.writeValueAsString(result));
// 关闭,也懒得写try...catch了
r.close();
}
}
相关推荐
资源文件为2019年11月县以上行政区划 文件检查过最后数据code和name被颠倒,本人使用中已经做了修复 前端需求者可以下载使用 注明:当前json文件不包含港澳台地区,如果需要的话可以手动在最下面添加上即可,非常方便
2023年全国行政区划代码
在“全国行政区划代码(JSON格式).zip”这个压缩包中,包含了两个文件:`location.json`和`location.min.json`。这两个文件都是JSON格式,但它们可能有所差异。`location.json`通常是未经压缩或精简的原始数据文件...
数据来源,http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html,已转json格式
来自 http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html 的json格式的行政区划代码
全国行政区划的JSON数据,省、市、区县,区划代码,应用于开发构成区域列表
适配ElementUI的级联选择el-cascader,国务院下载2019年版 GBT 2260-2007 中华人民共和国行政区划代码
标题中的“中国省市县地图json(区划代码).zip”表明这是一个包含中国各个省、市、县地图数据的压缩文件,格式为JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...
全国行政区划JSON文件是用于表示中国各级行政区域的数据文件,主要以JSON(JavaScript Object Notation)格式存储。这种格式的数据易于阅读和编写,同时也被广泛用于数据交换。JSON是一种轻量级的数据交换格式,它...
全国行政区域代码数据、JSON格式数据,高德地图提供。
《中国大陆行政区划精确到街道JSON》是一个数据资源,包含了中国境内所有行政区域的详细信息,具体细化到了街道级别。这个JSON文件(JavaScript Object Notation,一种轻量级的数据交换格式)是IT领域中用于存储和...
全国行政区划代码表是用于标识中国各级行政区域的一种标准化编码体系。这个数据库包含了从国家到县(区)级的行政单位,通常用于地理信息系统(GIS)、统计分析、邮政编码匹配、地址标准化等应用场景。该资源提供了...
中国地理位置信息, 银联卡跨行业务地区代码标准,人民共和国县以上行政区划代码。并做了映射,方便使用。 最近公司要做一个对接银联支付通道的东西; 在调用接口时需要传入地区代码, 这个代码银联定义了一套, 行政...
行政区划代码和名称数据是关于中国各级行政区域的唯一标识符和对应的名称,这些数据在很多IT应用中都非常重要,例如地理位置服务、人口统计分析、物流配送等。在这个压缩包中,包含了两种不同格式的数据——数组格式...
行政区划代码在中国是标准化的,通常由6位数字组成,前两位代表省份,中间两位代表城市,后两位代表区县。这些代码在政府统计、邮政服务和地理位置服务中广泛使用,能够唯一标识每一个行政单位。 在Echarts中使用...
综上所述,这个压缩包提供了关于中国省、市、县(区)级行政区划代码的多格式数据资源,涵盖了从原始数据到处理后的形式,以及适合编程和数据分析的格式。无论是开发地理信息系统、进行人口统计分析,还是构建涉及...
JSON(JavaScript Object ...而处理全国行政区域数据时,还需要考虑到行政区划的变更,定期更新JSON文件以保持数据的准确性。此外,优化加载和解析性能,避免一次性加载过多数据,也是前端开发中需要注意的问题。
中国行政区划分为五级:省、市、区县、乡镇及村。编码通常由6位数字组成,前两位代表省份,中间两位代表城市,最后两位代表区县。例如,110000代表北京市,310100代表上海市。在更细分的层级,如街道办事处或社区,...
前段时间公司要用最新国家行政代码, 进行了转换 国家行政码网址:http://www.mca.gov.cn/article/sj/xzqh/2020/2020/202003301019.html
{"adcode":100000,"level":"country","center":[116.3683244,39.915085],"name":"全国","children":[{"adcode":110000,"level":"province","center":[116.405285,39.904989],"name":"北京市","children":[{"adcode":...