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;

}

相关推荐
剩下了什么15 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
bugcome_com17 小时前
零基础入门C#:一篇搞懂核心知识点
c#
程序员敲代码吗20 小时前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
梦帮科技21 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
Lois_Luo21 小时前
关闭Win10强制所有应用以管理员身份运行
windows
缺点内向1 天前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
luoyayun3611 天前
实现Windows系统标题栏颜色跟随主题动态切换
windows·系统标题栏颜色·标题栏颜色
喵叔哟1 天前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
2501_930707781 天前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
猫头虎1 天前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy