解析全国省市区Json数据

    最近在使用项目中的区域表时,发现了有区域缺失的情况,于是找了个较新的省市区数据来解析更新到区域表中。

    数据来源:https://blog.csdn.net/supergao222/article/details/79102140

    下面使用的是fastJson来解析。看到analysisJson方法就行了,getAreaCodeList是构造自己的数据进行的操作,因人而异。

public class AreaCodeAnalysis {

	@Test
	public void getAreaCodeList() {
		File file = new File("C:\\Users\\Administrator\\Desktop\\areaJson.txt");
		String jsonString = txt2String(file);
		JSONObject jsonObject = JSON.parseObject(jsonString);
		// 解析json
		List<Area> areaList = analysisJson(jsonObject);
		// 得到areaList之后,就可以构造自己想要的数据,然后进行其它操作,如插入到数据库中等
	        List<MainAreaCode> areaCodeList = getAreaCodeList(areaList);
	}

	// 解析json得到areaList
	public List<Area> analysisJson(JSONObject jsonObject) {
		List<Area> areaList = new ArrayList<>();
		Set<String> set = jsonObject.keySet();
		for (Iterator<String> it = set.iterator(); it.hasNext();) {
			Area area = new Area();
			String key = it.next();
			Object obj = jsonObject.get(key);

			// 已经解析到区,obj.toString()的值为“··区”,如“蓬江区”
			// 不设辖区的市,如“{"child":[],"name":"东莞市"}”
			// 则不继续向下解析
			if (!obj.toString().endsWith("}") && !obj.toString().startsWith("{")) {
				area.setName(obj.toString());
			} else if (obj.toString().indexOf("[]") == 9) {
				JSONObject jo = JSON.parseObject(obj.toString());
				area.setName(jo.get("name").toString());
			} else {
				area = JSON.parseObject(obj.toString(), Area.class);
				area.setAreaChildList(analysisJson(area.getChild()));
			}
			area.setAreaCode(key);
			areaList.add(area);
		}
		return areaList;
	}

	// 读取txt
	public String txt2String(File file) {
		StringBuilder result = new StringBuilder();
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));// 构造一个BufferedReader类来读取文件
			String s = null;
			while ((s = br.readLine()) != null) {// 使用readLine方法,一次读一行
				result.append(s);
			}
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result.toString();
	}

	// 构造自己的MainAreaCode数据
	public List<MainAreaCode> getAreaCodeList(List<Area> areaList) {
		List<MainAreaCode> areaCodeList = new ArrayList<>();
		for (Area area : areaList) {
			MainAreaCode areaCode = new MainAreaCode();
			areaCode.setProvince(area.getName());
			areaCode.setAreaCode(area.getAreaCode());
			areaCode.setAreaLevel("0");
			areaCode.setAreaStatus("1");

			areaCodeList.add(areaCode);
			if (null != area.getAreaChildList()) {
				areaCodeList.addAll(getSecondAreaCodeList(area.getAreaChildList(), area.getName()));
			}
		}
		return areaCodeList;
	}

	// 市级数据
	public List<MainAreaCode> getSecondAreaCodeList(List<Area> areaList, String province) {
		List<MainAreaCode> areaCodeList = new ArrayList<>();
		for (Area area : areaList) {
			MainAreaCode areaCode = new MainAreaCode();
			areaCode.setProvince(province);
			areaCode.setCity(area.getName());
			areaCode.setAreaCode(area.getAreaCode());
			areaCode.setAreaLevel("1");
			areaCode.setAreaStatus("1");

			areaCodeList.add(areaCode);
			if (null != area.getAreaChildList()) {
				areaCodeList.addAll(getThirdAreaCodeList(area.getAreaChildList(), province, area.getName()));
			}
		}
		return areaCodeList;
	}

	// 区/县级数据
	public List<MainAreaCode> getThirdAreaCodeList(List<Area> areaList, String province, String city) {
		List<MainAreaCode> areaCodeList = new ArrayList<>();
		for (Area area : areaList) {
			MainAreaCode areaCode = new MainAreaCode();
			areaCode.setProvince(province);
			areaCode.setCity(city);
			areaCode.setCountry(area.getName());
			areaCode.setAreaCode(area.getAreaCode());
			areaCode.setAreaLevel("2");
			areaCode.setAreaStatus("1");

			areaCodeList.add(areaCode);
		}
		return areaCodeList;
	}
}
public class Area {
	private String areaCode;
	private String name;
	private JSONObject child;// 存放暂时未解析的jsonChild
	private List<Area> areaChildList;// 已解析完毕child

	public String getAreaCode() {
		return areaCode;
	}

	public void setAreaCode(String areaCode) {
		this.areaCode = areaCode;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public JSONObject getChild() {
		return child;
	}

	public void setChild(JSONObject child) {
		this.child = child;
	}

	public List<Area> getAreaChildList() {
		return areaChildList;
	}

	public void setAreaChildList(List<Area> areaChildList) {
		this.areaChildList = areaChildList;
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值