包含全國所有省份、城市、縣的一份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數據有錯誤,歡迎指出改正!

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM