全国省市县三级行政单位JSON解析,加载到缓存。

2024-05-02 07:08

本文主要是介绍全国省市县三级行政单位JSON解析,加载到缓存。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全国省市县三级行政单位JSON解析后加载到缓存。

一、主要实现的功能:

1、将全国JSON格式的文本文件IO读取为字符串。

2、将该字符串进行JSON解析,加载到缓存中。

3、依据省名称,可以查找到该省下的所有城市。

4、依据市名称,可以查找到该市下的所有区县。

5、依据市名称查找该市属于哪个省。

二、执行结果示例:

江苏省下辖市有:[盐城市, 徐州市, 泰州市, 南京市, 扬州市, 常州市, 镇江市, 宿迁市, 苏州市, 淮安市, 连云港市, 南通市, 无锡市]
南京市下辖区县有: [玄武区, 白下区, 秦淮区, 建邺区, 鼓楼区, 下关区, 浦口区, 栖霞区, 雨花台区, 江宁区, 六合区, 溧水县, 高淳县]
南京市属于:江苏省

三、全国省市县三级行政单位JSON格式文件。

      请到如下地址下载:http://download.csdn.net/download/tzszhzx/8402791

 

四、实现代码(需要引入fastJson.jar,并把JSON文件放到该类的包路径下):

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;public class AreaManager
{//省与市的列表键值对,可依据省名,获得该省下的城市列表@SuppressWarnings("rawtypes")private static HashMap<String, ArrayList> province_city_Map = new HashMap<String, ArrayList>();//市与省的建值对,可以依据市获取该市属于哪个省。private static HashMap<String ,String> city_province_Map = new HashMap<String, String>();//城市与区县的键值对,依据城市名称可以取得该城市下的所有区县列表。@SuppressWarnings("rawtypes")private static HashMap<String, ArrayList> city_town_Map = new HashMap<String, ArrayList>();public static void main(String args[]){//读取全国省市区县三级行政单位JSON文本文件为字符串String areaStr = readAreaFile();//将字符串解析,并放到三个缓存中,省对应的市列表、市一一对应的省、市对应的区县列表loadAllArea(areaStr);//依据省名获得下属的城市列表System.out.println("江苏省下辖市有:"+getCitysByProvince("江苏省"));//依据城市名称获得下属的区县列表System.out.println("南京市下辖区县有:"+getTownsByCity("南京市"));//依据城市获得所属于的省System.out.println("南京市属于:"+getBelongProvince("南京市"));}/*** 从当前路径下读取地区JSON文件转为JSON串。* @return*/private static String readAreaFile(){URL url = AreaManager.class.getResource("");File file = new File(url.getPath() + "/area-gb.json");StringBuffer buffer = new StringBuffer(1024);BufferedReader reader = null;String tempString = null;try{reader = new BufferedReader(new FileReader(file));while (null != (tempString = reader.readLine())){buffer.append(tempString);}}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}finally{if (reader != null){try{reader.close();}catch (IOException e){e.printStackTrace();}}}return buffer.toString();}/*** 将JSON串中的省、市、区三级单位加载到内存中* @param areaStr*/private static void loadAllArea(String areaStr){JSONObject obj = (JSONObject) JSON.parse(areaStr);String province = null;for (Entry<String, Object> provinceCityEntty : obj.entrySet()){//获得每一个省province = provinceCityEntty.getKey();Object cityAndTowns = provinceCityEntty.getValue();if (cityAndTowns instanceof JSONObject){ArrayList<String> cityList = new ArrayList<String>();for (Entry<String, Object> cityEntry : ((JSONObject) cityAndTowns).entrySet()){//获得该省下的每一个城市String city = cityEntry.getKey();cityList.add(city);city_province_Map.put(city, province);//将城市和省建立键值,可通过市名称获得省名称Object towns = cityEntry.getValue();if (towns instanceof JSONArray){JSONArray townArray = (JSONArray) towns;if (townArray.size() > 0){ArrayList<String> townList = new ArrayList<String>();for (Object everyTown : townArray){//取得区县的名称String town = everyTown.toString();townList.add(town);//如果以市结尾,说明规模还是可以的,则单独成为市,且也放到省里去
//                                if (town.endsWith("市"))
//                                {
//                                    ArrayList<String> townAlone = new ArrayList<String>();
//                                    townAlone.add(town);
//                                    city_town_Map.put(town, townAlone);//单独成为市
//                                    cityList.add(town);//放置到省里去,可以依据省直接获得
//                                }}city_town_Map.put(city, townList);//将该市下的所有区县进行HASH}}else{System.out.println("地区文件不合法");}}province_city_Map.put(province, cityList);//将该省下的所有市进行HASH}}}/*** 依据省名称返回该省下的所有城市列表* @param province* @return*/private static ArrayList<String> getCitysByProvince(String province){if (null != province && !province.isEmpty()){return province_city_Map.get(province);}elsereturn null;}/*** 依据城市名称获得该城市下的所有区县列表* @param city* @return*/private static ArrayList<String> getTownsByCity(String city){if (null != city && !city.isEmpty()){return city_town_Map.get(city);}elsereturn null;}/*** 依据市名获得该市所属于的省* @param city* @return*/private static String getBelongProvince(String city){if (null != city && !city.isEmpty()){return city_province_Map.get(city);}elsereturn null;}}


 

 

 

 

 

这篇关于全国省市县三级行政单位JSON解析,加载到缓存。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953666

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N