包含全国所有省份、城市、县的一份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获取省市信息来实现自己的业务逻辑了
二、更加齐全的省市县信息
这份文件内容比上面的更加齐全,基本上已经涵盖了第一种,但是只适合国内的城市,主要特点:
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数据有错误,欢迎指出改正!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY