当前位置: 首页 > news >正文

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;

 }
       

http://www.lryc.cn/news/402209.html

相关文章:

  • 用C语言写的一个扫雷小游戏
  • C++——类和对象(初始化列表和运算符重载与静态与友元)
  • 【WPF】图片剪裁-ImageCropping
  • C++的模板(十二):forward模板
  • docker desktop历史版本安装
  • Ubuntu系统成功安装Docker教程
  • C++ 匹配并提取包括加中括号的日期时间的正则表达式
  • 一文-深入了解Ansible常见模块、安装和部署
  • etcd的备份与恢复
  • 从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望
  • 【postgresql】pg_dump备份数据库
  • 服务器的80和443端口关闭也能申请SSL证书
  • Odoo17应用、模型、字段
  • Airtest的控制手机滑动位置偏差修正方法总结
  • 【机器学习】Grid Search: 一种系统性的超参数优化方法
  • Laravel Passport:API认证的瑞士军刀
  • SpringBoot Bean管理
  • Qt5.12.2安装教程
  • 2024年大数据高频面试题(中篇)
  • Python编程工具PyCharm和Jupyter Notebook的使用差异
  • 顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH)
  • 【数据集处理工具】根据COCO数据集的json标注文件实现训练与图像的文件划分
  • vue 如何做一个动态的 BreadCrumb 组件,el-breadcrumb ElementUI
  • FFmpeg播放视频
  • 重叠区间的求和
  • java包装类 及其缓存
  • 大龄程序员的出路在哪里?
  • Unity不用脚本实现点击按钮让另外一个物体隐藏
  • RAG技术-为自然语言处理注入新动力
  • Docker安装ELK(简易版)