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. C# Newtonsoft.Json解析json笔记

    2024-07-11 18:40:02       43 阅读
  2. Android解析sdcard下的json文件

    2024-07-11 18:40:02       45 阅读
  3. C# Newtonsoft.Json解析json到自定义实体类

    2024-07-11 18:40:02       51 阅读
  4. VSCode配置json文件 C语言篇

    2024-07-11 18:40:02       32 阅读
  5. CC++、C#中.vscode下json文件记录

    2024-07-11 18:40:02       29 阅读
  6. 02_c/c++开源库 json解析jsoncpp库

    2024-07-11 18:40:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 18:40:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 18:40:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 18:40:02       58 阅读
  4. Python语言-面向对象

    2024-07-11 18:40:02       69 阅读

热门阅读

  1. OpenCV和CUDA匹配,使用源码构建OpenCV

    2024-07-11 18:40:02       21 阅读
  2. Oracle左连接过滤条件注意事项

    2024-07-11 18:40:02       20 阅读
  3. Spring-Data-ES-template工具类使用

    2024-07-11 18:40:02       23 阅读
  4. 四种常见的Http请求方式

    2024-07-11 18:40:02       21 阅读
  5. [USACO5.3] 巨大的牛棚Big Barn

    2024-07-11 18:40:02       26 阅读
  6. python杨辉三角的两种书写方式

    2024-07-11 18:40:02       21 阅读
  7. 【Go - 常见的5类循环】

    2024-07-11 18:40:02       26 阅读
  8. 二叉搜索树的最近公共祖先

    2024-07-11 18:40:02       23 阅读
  9. 基于单目摄像头实现的AR多人脸捕捉效果展示

    2024-07-11 18:40:02       18 阅读
  10. git 基本使用

    2024-07-11 18:40:02       22 阅读
  11. 【智能制造-15】常见通讯协议

    2024-07-11 18:40:02       22 阅读
  12. 网络编程学习part1

    2024-07-11 18:40:02       23 阅读