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

Posted 格格巫 MMQ!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含全国所有省份城市县的一份json文件相关的知识,希望对你有一定的参考价值。

简单说明一下

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
  之后就是使用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:

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文件的主要内容,如果未能解决你的问题,请参考以下文章

Echarts实现全国地图点击进入各省份,各省份有对应的城市坐标点显示

天气预报APP

中华人民共和国行政区划:省级(省份直辖市自治区) 地级(城市) 县级(区县) 乡级(乡镇街道) 村级(村委会居委会)

python实现城市和省份字典(根据城市判断属于哪个省份)

echarts3的中国地图省份名称位置都不在省份中间,位置怎么调整?

世界国家省城市SQL