最近做項目時,有個需要全國所有省市信息的數據,於是百度了一下,發現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獲取省市信息來實現自己的業務邏輯了
二、更加齊全的省市縣信息
這份文件內容比上面的更加齊全,基本上已經涵蓋了第一種,但是只適合國內的城市,主要特點:
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; } } }
注:至於讀取,各種語言應該都可以讀取json,這里我使用C#,將上面的json保存到一個city.json文件中,然后將文件條件到項目中,設置文件的生成操作為嵌入的資源,因為是json文件操作,所有引入Newtonsoft.Json包,如下圖:
最后,如果上面的Json數據有錯誤,歡迎指出改正!