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 = listi"name".ToString().Trim();

if (listi"children"!=null)

{

children = listi"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;

}

相关推荐
sukalot5 分钟前
Windows 驱动实例分析系列:libwdi 驱动分析 - libwdi 篇(五)
windows·驱动开发
(Charon)12 分钟前
【C/C++面试】手写内存池:从空闲链表到内存申请与释放
java·开发语言·windows
UIU11412 分钟前
-7 / 2 在 C 里是 -3,在 Python 里是 -4,谁算错了?
c++·学习·c#
福兮说14 分钟前
前后端算的 MD5、SHA-256 对不上?编码、换行、BOM、HMAC、JSON 顺序,八个原因逐个实测
前端·javascript·node.js·json·哈希算法
CS创新实验室42 分钟前
Python 的鸭子类型
开发语言·windows·python
kakakahahahaha1 小时前
电脑显示器无信号排查:HDMI/DP接口、独立显卡、内存与安全模式
windows·安全·电脑·笔记本电脑·内容运营·软件需求
wflynn2 小时前
GitHub 今日推荐|REDox:64 位 token 表示结构化数据,内存占用降 70% 支持多格式互转
开源·c#·github
驰骋工作流3 小时前
C#/.NET 开源BPM工作流引擎6大常用对比选型分析驰骋BPM驰骋低代码低代码工作流引擎
开源·c#·.net
en.en..3 小时前
C语言 fp与fd 区别详解
c#
ITHAOGE1513 小时前
下载 | Win10 2021纯净精简版,预装应用极少!(9月更新、Win10 IoT LTSC 2021版、适合老电脑)
windows·科技·物联网·微软·电脑