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;

}

相关推荐
Traced back29 分钟前
# Windows窗体 + SQL Server 自动清理功能完整方案优化版
数据库·windows·.net
阿蒙Amon33 分钟前
C#每日面试题-简述异常处理
开发语言·c#
软件资深者3 小时前
HP M126a打印机,系统不支持请求的命令或者资源管理器出错
windows·windows11·系统修复
SJjiemo3 小时前
TreeSize Pro 专业磁盘空间分析
windows
电商API&Tina3 小时前
Python请求淘宝商品评论API接口全指南||taobao评论API
java·开发语言·数据库·python·json·php
数据的世界014 小时前
C#4.0权威指南第10章:继承
c#
摸鱼仙人~6 小时前
构建基于 JSON 模板的可插拔通用LLM信息提取系统
windows
小熊熊知识库6 小时前
MinIO文件对象存储使用(C#)
c#
特立独行的猫a6 小时前
claude code 在windows下的最简单安装方法
windows·claude·安装
Lv11770087 小时前
Visual Studio中的二维数组和交错数组
ide·笔记·c#·visual studio