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;

}

相关推荐
某柚啊1 小时前
Windows开启IIS后依然出现http error 503.the service is unavailable
windows·http
_oP_i1 小时前
HTTP 请求Media typetext/plain application/json text/json区别
网络协议·http·json
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
码农君莫笑2 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
鲤籽鲲2 小时前
C# Random 随机数 全面解析
android·java·c#
蜜獾云4 小时前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
唐宋元明清21884 小时前
Windows 记录开机后应用启动慢的问题
windows·系统异常
fkdw5 小时前
C# Newtonsoft.Json 反序列化派生类数据丢失问题
c#·json