• 包含全国所有省份、城市、县的一份json文件


      最近做项目时,有个需要全国所有省市信息的数据,于是百度了一下,发现CSDN的很多都需要积分下载,无解!所以自己收集了一份整理了出来。

      简单说明一下

      1、这是一份json文件,这是因为全国的省市信息一般不会改变,如果需要xml格式的数据,可以自行读取json,然后进行xml序列化就好了,

      2、数据包含全国所有城市信息,包括直辖市,地级市,县级市等等,如果只需要地级市,可按类型进行刷选

      3、博主整理了两份json,读者可自行选择

      由于文件比较大(其实也才几百K(-_-!!)),博客园提交不上去,所以只能放在百度云上了:https://pan.baidu.com/s/1z3EV2JB30LSvnE0l6MwoXg (提取码:98ph)

      一、只包含省市信息

      这部分的json文件中只包含省市信息,以满足一些简单的需求,比如只需要限制在城市级别的需求会好一些,主要特点:

      1、只包含省市信息,市区分直辖市、地级市和县级市等等

      2、包含港澳台城市

      3、json文件中没有省份城市代码,读者可自行根据自己的需求创建代码

      文件中的字段说明如下:    

      {
        "provinceType": 1,        //省份类型:1-直辖市,2-省,3-自治区,4-特别行政区
        "provinceName": "北京市",    //省份名称
        "city": [
          {
            "cityName": "北京市",     //城市名称
            "areaType": 1,        //区域类型:1-直辖市,2-地级市,3-县级市,4-地区,5-自治州,6-盟,7-特别行政区
            "isCapital": true      //是否是省会或者中心城市
          }
        ]
      }        

      接着写一个辅助类来进行读取,就是压缩包中的CityHelper:   

      
        public class CityHelper
        {
            static Province[] provinces;
    
            static CityHelper()
            {
                var assemby = typeof(CityHelper).Assembly;
                var stream = assemby.GetManifestResourceStream($"{assemby.GetName().Name}.Resources.city.json");
                using (var sr = new StreamReader(stream, Encoding.UTF8))
                {
                    var json = sr.ReadToEnd();
                    provinces = JsonConvert.DeserializeObject<Province[]>(json);
                }
            }
    
            /// <summary>
            /// 获取所有的省份信息
            /// </summary>
            /// <returns></returns>
            public static Province[] GetAllProvinces()
            {
                return provinces;
            }
            /// <summary>
            /// 获取指定名称的省份
            /// </summary>
            /// <param name="provinceName"></param>
            /// <returns></returns>
            public static Province FindProvinceByName(string provinceName)
            {
                return provinces.FirstOrDefault(f => f.ProvinceName == provinceName);
            }
        }
        public class Province
        {
            /// <summary>
            /// 省份名称
            /// </summary>
            public string ProvinceName { get; set; }
            /// <summary>
            /// 省份类型
            /// </summary>
            public ProvinceType ProvinceType { get; set; }
    
            public City[] City { get; set; }
        }
        public enum ProvinceType
        {
            直辖市 = 1, 省 = 2, 自治区 = 3, 特别行政区 = 4
        }
        public class City
        {
            /// <summary>
            /// 城市名称
            /// </summary>
            public string CityName { get; set; }
            /// <summary>
            /// 区域类型
            /// </summary>
            public AreaType AreaType { get; set; }
            /// <summary>
            /// 是否是省会
            /// </summary>
            public bool IsCapital { get; set; }
        }
        public enum AreaType
        {
            直辖市 = 1, 地级市 = 2, 县级市 = 3, 地区 = 4, 自治州 = 5, 盟 = 6, 特别行政区 = 7
        }
    CityHelper

      之后就是使用CityHelper获取省市信息来实现自己的业务逻辑了

      二、更加齐全的省市县信息

      这份文件内容比上面的更加齐全,基本上已经涵盖了第一种,但是只适合国内的城市,主要特点:

      1、文件中的城市只包含国内的城市,不包含港澳台地区

      2、文件中数据更加详细,包含省市县

      3、文件中各省市县均采用身份证开头6位作为编码

      4、城市同样区分直辖市、地级市和县级市等等

      5、因为包含的信息多,所以文件可能比较大,如果觉得放内存不方便,读者可自行将数据初始化到redis或者数据库中

      其中的字段说明如下:  

      {
        "provinceCode": "110000",   //省份代码
        "provinceName": "北京市",    //省份名称
        "provinceType": 1,        //省份类型:直辖市 = 1, 省 = 2, 自治区 = 3
        "cities": [
        {
            "cityCode": "110100",    //城市代码
            "cityName": "市辖区",     //城市名称
            "cityType": 1,         //城市类型:市辖区 = 1, 直辖市 = 2, 地级市 = 3, 地区 = 4, 自治州 = 5, 盟 = 6
            "isCapital": true,      //是否是省会
            "counties": [
              {
                "countyCode": "110101",  //县代码
                "countyName": "东城区",    //县名称
                "isCity": false        //是否是县级市
              }
            ]
          }
        ]
      }

      同样,压缩包中提供了一个辅助类CityHelper:  

      
    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Utility
    {
        public class CityHelper
        {
            static Province[] provinces;
    
            static CityHelper()
            {
                //这部分也可以加载到redis中
                var assemby = typeof(CityHelper).Assembly;
                var stream = assemby.GetManifestResourceStream($"{assemby.GetName().Name}.Resources.city.json");
                using (var sr = new StreamReader(stream, Encoding.UTF8))
                {
                    var json = sr.ReadToEnd();
                    provinces = JsonConvert.DeserializeObject<Province[]>(json);
                }
            }
    
            /// <summary>
            /// 获取所有的省份信息
            /// </summary>
            /// <returns></returns>
            public static Province[] GetProvinces()
            {
                return provinces;
            }
            /// <summary>
            /// 根据省份代码获取省份信息
            /// </summary>
            /// <param name="provinceCode"></param>
            /// <returns></returns>
            public static Province GetProvinceByCode(string provinceCode)
            {
                return GetProvinces().FirstOrDefault(f => f.ProvinceCode == provinceCode);
            }
            /// <summary>
            /// 模糊查询指定名称的省份
            /// </summary>
            /// <param name="provinceName"></param>
            /// <returns></returns>
            public static Province[] FindProvinceByName(string provinceName)
            {
                return GetProvinces().Where(f => f.ProvinceName.Contains(provinceName)).ToArray();
            }
            /// <summary>
            /// 使用指定的省份代码获取城市
            /// </summary>
            /// <param name="provinceCode"></param>
            /// <returns></returns>
            public static City[] GetCities(string provinceCode)
            {
                return GetProvinces().FirstOrDefault(f => f.ProvinceCode == provinceCode)?.Cities ?? new City[0];
            }
            /// <summary>
            /// 根据城市代码获取城市
            /// </summary>
            /// <param name="cityCode"></param>
            /// <returns></returns>
            public static City GetCityByCode(string cityCode)
            {
                return GetProvinces().SelectMany(f => f.Cities.Where(c => c.CityCode == cityCode)).FirstOrDefault();
            }
            /// <summary>
            /// 模糊查询指定名称的城市
            /// </summary>
            /// <param name="cityName"></param>
            /// <returns></returns>
            public static City[] FindCityByName(string cityName)
            {
                return GetProvinces().SelectMany(f => f.Cities.Where(c => c.CityName.Contains(cityName))).ToArray();
            }
            /// <summary>
            /// 根据城市代码获取所有的县
            /// </summary>
            /// <param name="cityCode"></param>
            /// <returns></returns>
            public static County[] GetCounties(string cityCode)
            {
                return GetCityByCode(cityCode)?.Counties ?? new County[0];
            }
            /// <summary>
            /// 根据县代码获取县
            /// </summary>
            /// <param name="countyCode"></param>
            /// <returns></returns>
            public static County GetCountyByCode(string countyCode)
            {
                return GetProvinces().SelectMany(f => f.Cities.SelectMany(c => c.Counties.Where(m => m.CountyCode == countyCode))).FirstOrDefault();
            }
            /// <summary>
            /// 根据省份代码获取所有的县
            /// </summary>
            /// <param name="provinceCode"></param>
            /// <returns></returns>
            public static County[] GetContriesByProvinceCode(string provinceCode)
            {
                return GetProvinceByCode(provinceCode)?.Cities?.SelectMany(f => f.Counties)?.ToArray() ?? new County[0];
            }
            /// <summary>
            /// 根据县名称模糊查询县
            /// </summary>
            /// <param name="countyName"></param>
            /// <returns></returns>
            public static County[] FindCountyByName(string countyName)
            {
                return GetProvinces().SelectMany(f => f.Cities.SelectMany(c => c.Counties.Where(m => m.CountyName.Contains(countyName)))).ToArray();
            }
        }
        public class Province
        {
            /// <summary>
            /// 省份代码
            /// </summary>
            public string ProvinceCode { get; set; }
            /// <summary>
            /// 省份名称
            /// </summary>
            public string ProvinceName { get; set; }
            /// <summary>
            /// 省份类型
            /// </summary>
            public ProvinceType ProvinceType { get; set; }
    
            /// <summary>
            /// 城市
            /// </summary>
            public City[] Cities { get; set; }
        }
        public enum ProvinceType
        {
            直辖市 = 1, 省 = 2, 自治区 = 3
        }
        public class City
        {
            /// <summary>
            /// 测试代码
            /// </summary>
            public string CityCode { get; set; }
            /// <summary>
            /// 城市名称
            /// </summary>
            public string CityName { get; set; }
            /// <summary>
            /// 城市类型
            /// </summary>
            public CityType CityType { get; set; }
            /// <summary>
            /// 是否是省会
            /// </summary>
            public bool IsCapital { get; set; }
    
            /// <summary>
            ////// </summary>
            public County[] Counties { get; set; }
        }
        public enum CityType
        {
            市辖区 = 1, 直辖市 = 2, 地级市 = 3, 地区 = 4, 自治州 = 5, 盟 = 6
        }
        public class County
        {
            /// <summary>
            /// 县代码
            /// </summary>
            public string CountyCode { get; set; }
            /// <summary>
            /// 县名称
            /// </summary>
            public string CountyName { get; set; }
            /// <summary>
            /// 是否是县级市
            /// </summary>
            public bool isCity { get; set; }
        }
    }
    CityHelper

      

      注:至于读取,各种语言应该都可以读取json,这里我使用C#,将上面的json保存到一个city.json文件中,然后将文件条件到项目中,设置文件的生成操作为嵌入的资源,因为是json文件操作,所有引入Newtonsoft.Json包,如下图:

      

      最后,如果上面的Json数据有错误,欢迎指出改正!

      

  • 相关阅读:
    [WPF系列] 需要区分的内容
    [WPF系列]基础 Listening to Dependency Property change notifications of a given Element
    [WPF系列]-基础系列 Property Trigger, DataTrigger & EventTrigger
    [WPF系列]-高级部分 Shadowed TextBox
    [WPF系列]-Adorner
    [WPF系列]-使用Binding来同步不同控件的Dependency property
    各类型液晶电视面板解析
    数据库 --> 8种NoSQL数据库对比
    数据库 --> 5种关系型数据库比较
    云计算 --> 三种服务模式IaaS,PaaS,SaaS
  • 原文地址:https://www.cnblogs.com/shanfeng1000/p/14086576.html
Copyright © 2020-2023  润新知