全国省市县三级行政单位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);
        }
        else
            return null;
    }

    /**
     * 依据城市名称获得该城市下的所有区县列表
     * @param city
     * @return
     */
    private static ArrayList<String> getTownsByCity(String city)
    {
        if (null != city && !city.isEmpty())
        {
            return city_town_Map.get(city);
        }
        else
            return null;
    }
    
    /**
     * 依据市名获得该市所属于的省
     * @param city
     * @return
     */
    private static String getBelongProvince(String city)
    {
        if (null != city && !city.isEmpty())
        {
            return city_province_Map.get(city);
        }
        else
            return null;
    }

}


 

 

 

 

 

全国省市三级行政单位JSON格式文本文件. 通过解析该文件可以: 1、将全国JSON格式的文本文件IO读取为字符串。 2、将该字符串进行JSON解析加载缓存中。 3、依据省名称,可以查找到该省下的所有城。 4、依据名称,可以查找到该下的所有区。 5、依据名称查找属于哪个省。 以江苏省为例如下: "江苏省":{"南京":["玄武区","白下区","秦淮区","建邺区","鼓楼区","下关区","浦口区","栖霞区","雨花台区","江宁区","六合区","溧水","高淳"],"无锡":["崇安区","南长区","北塘区","锡山区","惠山区","滨湖区","江阴","宜兴"],"徐州":["鼓楼区","云龙区","九里区","贾汪区","泉山区","丰","沛","铜山","睢宁","新沂","邳州"],"常州":["天宁区","钟楼区","戚墅堰区","新北区","武进区","溧阳","金坛"],"苏州":["沧浪区","平江区","金阊区","虎丘区","吴中区","相城区","常熟","张家港","昆山","吴江","太仓"],"南通":["崇川区","港闸区","海安","如东","启东","如皋","通州","海门"],"连云港":["连云区","新浦区","海州区","赣榆","东海","灌云","灌南"],"淮安":["清河区","楚州区","淮阴区","清浦区","涟水","洪泽","盱眙","金湖"],"盐城":["亭湖区","盐都区","响水","滨海","阜宁","射阳","建湖","东台","大丰"],"扬州":["广陵区","邗江区","郊区","宝应","仪征","高邮","江都"],"镇江":["京口区","润州区","丹徒区","丹阳","扬中","句容"],"泰州":["海陵区","高港区","兴化","靖江","泰兴","姜堰"],"宿迁":["宿城区","宿豫区","沭阳","泗阳","泗洪"]}
### 回答1: 省市区三级address.json是一个包含全国省、、区三级行政区划信息的JSON文件。它的主要作用是为了满足各种程序或网站在开发中获取用户所在地理位置信息的需求。 该JSON文件具有以下特点: 1. 根据行政区划的级别,分为三个层次,包含全国34个省级行政区、334个地级行政区、2899个行政区。 2. 每个行政区划包含对应的编码、名称、拼音、经纬度等信息,方便对数据进行处理、展示和分析。 3. 格式符合JSON规范,可方便地被读取、解析和导入到各种开发环境中。 该JSON文件的应用广泛,例如在网上购物时,可根据用户地址获取物流信息;在线预定机票时,可根据目的地的地址生成正确的航班信息等。 总的来说,省市区三级address.json是一个方便程序员和网站开发者获取省、、区行政区划信息的数据集,有助于提高网站程序的精度和用户体验。 ### 回答2: 省市区三级address.json是一份具有地域性质的json数据文件。该文件中包含了我国各个省市区的详细信息,包括名称简称、邮编、经纬度等地理信息。通过该文件可以方便地获取我国各个省市区的详细信息,在实际开发中广泛应用于地址选择、物流配送、地理信息分析等领域。 在该文件中,省市区三级都以树状结构展示,省级为根节点,级为中间节点,区级为叶子节点。每个节点都包含了各自的名称、编码、经纬度等信息,同时它们之间也存在着父子关系。这样的展示方式方便了数据的查找和使用。 为了让该文件更加方便地被使用,一般会将其转化为各种通用格式,如csv、xml、sql等。而在实现过程中,还需要注意文件大小和数据准确性问题,避免出现过大的文件和错误的数据对实际应用产生不良影响。 总之,省市区三级address.json是一份重要的地理信息数据文件,对于从事地理信息相关开发的人员来说,具有重要的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值