包含全国所有省份、城市、县的一份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数据有错误,欢迎指出改正!
包含全国所有省份、城市、县的一份json文件的更多相关文章
- ABP开发框架前后端开发系列---(6)ABP基础接口处理和省份城市行政区管理模块的开发
最近没有更新ABP框架的相关文章,一直在研究和封装相关的接口,总算告一段落,开始继续整理下开发心得.上次我在随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目 ...
- Winform开发框架之字典管理模块的更新,附上最新2013年全国最新县及县以上行政区划代码sql脚本
在很多项目里面,字典管理是必备的项目模块,而这个又是比较通用的功能,因此可以单独做成一个通用字典管理,例如这个模块,可以通过集成的方式,使用在我的<Winform开发框架>.<WCF ...
- ajax+struts2 实现省份-城市-地区三级联动
1.需求分析 2.js部分(通过ajax异步请求实现) 省份-->城市联动 城市-->地区 3.struts部分 struts.xml action部分 4.service部分 5.总结 ...
- mpvue微信小程序多列选择器用法:实现省份城市选择
前言 微信小程序默认给我们提供了一个省市区的picker选择器,只需将mode设置为region即可 <picker mode="region" bindchange=&qu ...
- vue 下实现 echarts 全国到省份的地图下钻
vue 下实现 echarts 全国到省份的地图下钻 项目地址:https://github.com/cag2050/vue_echarts_v3_demo
- 根据现有IP地址获取其地理位置(省份,城市等)的方法
根据现有IP地址获取其地理位置(省份,城市等)的方法 function GetIpLookup($ip = ''){ if(empty($ip)){ return '请输入IP地址'; } $res ...
- 利用Echarts实现全国各个省份数据占比,图形为中国地图
最近项目需求,需要一个对于全国各个省份的数据分析,图形最好是地图的样子,这样子更为直观. 最先想到的图表插件是Echarts,他的文档相对于阿里的G2,G6更加清晰一些.在Echarts 里找到的个 ...
- 省份-城市-区域三级联动【struts2 + ajax +非数据库版】
package loaderman; /** * 实体,封装省份和城市 */ public class Bean { private String province;//省份 private Stri ...
- Ajax案例-基于XML,以POST方式,完成省份-城市二级下拉联动
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC & ...
随机推荐
- zabbix之被动模式之编译安装proxy
#:准备源码包,编译安装 root@ubuntu:/usr/local/src# ls zabbix-4.0.12.tar.gz root@ubuntu:/usr/local/src# tar xf ...
- Dubbo管控平台
2019年初,官方发布了Dubbo管理控制台0.1版本.结构上采取了前后端分离的方式,前端使用Vue和Vuetify分别作为Javascript框架和UI框架,后端采用Spring Boot框架 一. ...
- 【力扣】95. 不同的二叉搜索树 II
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的 ...
- 【C/C++】输入:连续输入,以逗号隔开
连续输入,以空格或者以逗号隔开,换行符结束 [范例]输入 23 12 34 56 33或者 23,12,34,56,33 则 vector<int> data; int tmp; whil ...
- 强化学习实战 | 表格型Q-Learning玩井字棋(四)游戏时间
在 强化学习实战 | 表格型Q-Learning玩井字棋(三)优化,优化 中,我们经过优化和训练,得到了一个还不错的Q表格,这一节我们将用pygame实现一个有人机对战,机机对战和作弊功能的井字棋游戏 ...
- 密码学之Hash散列
一.简介 hash(散列.杂凑)函数,是将任意长度的数据映射到有限长度的域上. 直观解释起来,就是对一串数据m进行杂糅,输出另一段固定长度的数据h,作为这段数据的特征(指纹).也就是说,无论数据块m有 ...
- ios获取文件MD5值
一般我们在使用http或者socket上传或者下载文件的时候,经常会在完成之后经行一次MD5值得校验(尤其是在断点续传的时候用的更 多),校验MD5值是为了防止在传输的过程当中丢包或者数据包被篡改,在 ...
- 删除其他列Table.SelectColumns(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- THUSC 2021 游记
想了想不往博客园放不行,还是放上来了. 原文 \[\texttt{Brief Introduction} \] 众所周知,THUSC2021 5 月 15-16 日在杭州市 XJ 中学举办,然而由于 ...
- SpringBoot结果集包装类
1.前言 在SpringBoot项目中.看了一部分代码.发现一般的接口以JSON形式返回最佳.接口规范遵照RESTFUL风格来写.返回的结果集呢.借助包装类来包装.这样有利于前后端的交互.写出来的代码 ...