C# 解析省份、城市、区域 json文件

一、json文件内容如下,(小程序里好像有用到...):

二、读取包含省份城市区域的json文件,并整理成想要的结果:

string path = Server.MapPath("/js");

string file = System.IO.Path.Combine(path, "数据.json");

string message = "";

string fielval = readfile(file, ref message);

if(message=="")

{

fielval = fielval.Replace("\n", "").Replace("\t", "").Replace(" ", "");

JObject json=JObject.Parse(fielval);

string data = json["data"].ToString();

string namesel = "福建省";

Dictionary<string, List<string>> res = new Dictionary<string, List<string>>();

++bool isget = getChild(namesel,"福州市", data,1, ref res);//下面有调用说明++

message = "";

}

三、循环整理数据,计算出想要的结果:

/// <summary>

/// 循环整理数据

/// </summary>

/// <param name="sfname">省份</param>

/// <param name="cityname">城市</param>

/// <param name="children">json值</param>

/// <param name="ift">第几次循环</param>

/// <param name="res">返回</param>

/// <returns></returns>

private bool getChild(string sfname,string cityname, string children,int ift,ref Dictionary<string, List<string>> res)

{

try

{

List<Dictionary<string, object>> list = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(children);

if(ift==1 && !string.IsNullOrEmpty(sfname))

{

//saix 省份

var reslst = from u in list where u["name"].ToString() == "" + sfname + "" select u;

list = reslst.ToList();

}

if(ift==2 && !string.IsNullOrEmpty(cityname))

{

//赛选城市

var reslst = from u in list where u["name"].ToString() == "" + cityname + "" select u;

list = reslst.ToList();

}

if (list.Count > 0)

{

ift++;

List<string> dic_child = new List<string>();

for (int i = 0; i < list.Count; i++)

{

bool getcl = false;

string name = list[i]["name"].ToString().Trim();

if (list[i]["children"]!=null)

{

children = list[i]["children"].ToString().Trim();

if (children.Trim().ToLower() != "null" && children.Trim().ToLower() != "")

{

getcl = true;

getChild(name, cityname, children, ift, ref res);

}

}

else { children = ""; }

if(!getcl)

{

dic_child.Add(name);//, children

}

}

if(ift==1 || !string.IsNullOrEmpty(sfname))

{

res.Add(sfname, dic_child);

}

else

{

res.Add(cityname, dic_child);

}

}

return true;

}

catch (Exception ex)

{

return false;

}

}

四、getChild(string sfname,string cityname, string children,int ift,ref Dictionary<string, List<string>> res),调用说明

bool isget = getChild("福建省","福州市", data,1, ref res);//
sfname、cityname都有传值,相当于查询cityname下的区域信息,结果如下:

bool isget = getChild("福建省","", data,1, ref res);//
只有sfname都有传值,而cityname为空,相当于查询sfname下所有城市及各城市下所有区域信息,结果如下:

五、readfile 方法:

public string readfile(string filename, ref string message)

{

string fielval = "";

try

{

if (System.IO.File.Exists(filename))

{

using (StreamReader sreader = new StreamReader(filename, Encoding.UTF8))

{

fielval = sreader.ReadToEnd();

sreader.Close();

sreader.Dispose();

}

}

else

{

message = "未找到文件" + filename;

}

}

catch (Exception ex)

{

message = ex.Message;

}

return fielval;

}

相关推荐
军训猫猫头13 分钟前
56.命令绑定 C#例子 WPF例子
开发语言·c#·wpf
renhl25216 分钟前
opengrok_使用技巧
windows
NiNg_1_23416 分钟前
Windows cmd常用命令
windows·cmd
一个假的前端男2 小时前
Windows Docker Desktop安装及使用 Docker 运行 MySQL
windows·docker·容器
小唐C++2 小时前
C++小病毒-1.0勒索
开发语言·c++·vscode·python·算法·c#·编辑器
菜鸟记录3 小时前
C#AWS signatureV4对接Amazon接口
c#·aws·amazon·aksk
书生-w4 小时前
Redis Windows 解压版安装
数据库·windows·redis
上位机付工4 小时前
浅谈单例模式
开发语言·c#
OliverH-yishuihan4 小时前
C++ list 容器用法
c++·windows·list
步、步、为营4 小时前
从0到1:.NET Core微服务的Docker容器奇幻冒险
微服务·c#·asp.net·.net·.netcore