首先引用 解析类库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace BPMS.WEB.Common
{public class CommonJsonModel : CommonJsonModelAnalyzer{private string rawjson;private bool isValue = false;private bool isModel = false;private bool isCollection = false;public CommonJsonModel(string rawjson){this.rawjson = rawjson;if (string.IsNullOrEmpty(rawjson))throw new Exception("missing rawjson");rawjson = rawjson.Trim();if (rawjson.StartsWith("{")){isModel = true;}else if (rawjson.StartsWith("[")){isCollection = true;}else{isValue = true;}}public string Rawjson{get { return rawjson; }}public bool IsValue(){return isValue;}public bool IsValue(string key){if (!isModel)return false;if (string.IsNullOrEmpty(key))return false;foreach (string subjson in base._GetCollection(this.rawjson)){CommonJsonModel model = new CommonJsonModel(subjson);if (!model.IsValue())continue;if (model.Key == key){CommonJsonModel submodel = new CommonJsonModel(model.Value);return submodel.IsValue();}}return false;}public bool IsModel(){return isModel;}public bool IsModel(string key){if (!isModel)return false;if (string.IsNullOrEmpty(key))return false;foreach (string subjson in base._GetCollection(this.rawjson)){CommonJsonModel model = new CommonJsonModel(subjson);if (!model.IsValue())continue;if (model.Key == key){CommonJsonModel submodel = new CommonJsonModel(model.Value);return submodel.IsModel();}}return false;}public bool IsCollection(){return isCollection;}public bool IsCollection(string key){if (!isModel)return false;if (string.IsNullOrEmpty(key))return false;foreach (string subjson in base._GetCollection(this.rawjson)){CommonJsonModel model = new CommonJsonModel(subjson);if (!model.IsValue())continue;if (model.Key == key){CommonJsonModel submodel = new CommonJsonModel(model.Value);return submodel.IsCollection();}}return false;}/// <summary>/// 当模型是对象,返回拥有的key/// </summary>/// <returns></returns>public List<string> GetKeys(){if (!isModel)return null;List<string> list = new List<string>();foreach (string subjson in base._GetCollection(this.rawjson)){string key = new CommonJsonModel(subjson).Key;if (!string.IsNullOrEmpty(key))list.Add(key);}return list;}/// <summary>/// 当模型是对象,key对应是值,则返回key对应的值/// </summary>/// <param name="key"></param>/// <returns></returns>public string GetValue(string key){if (!isModel)return null;if (string.IsNullOrEmpty(key))return null;foreach (string subjson in base._GetCollection(this.rawjson)){CommonJsonModel model = new CommonJsonModel(subjson);if (!model.IsValue())continue;if (model.Key != key)continue;if (model.Key == key)return model.Value;}return null;}/// <summary>/// 模型是对象,key对应是对象,返回key对应的对象/// </summary>/// <param name="key"></param>/// <returns></returns>public CommonJsonModel GetModel(string key){if (!isModel)return null;if (string.IsNullOrEmpty(key))return null;foreach (string subjson in base._GetCollection(this.rawjson)){CommonJsonModel model = new CommonJsonModel(subjson);if (!model.IsValue())continue;if (model.Key == key){CommonJsonModel submodel = new CommonJsonModel(model.Value);if (!submodel.IsModel())return null;elsereturn submodel;}}return null;}/// <summary>/// 模型是对象,key对应是集合,返回集合/// </summary>/// <param name="key"></param>/// <returns></returns>public CommonJsonModel GetCollection(string key){if (!isModel)return null;if (string.IsNullOrEmpty(key))return null;foreach (string subjson in base._GetCollection(this.rawjson)){CommonJsonModel model = new CommonJsonModel(subjson);if (!model.IsValue())continue;if (model.Key == key){CommonJsonModel submodel = new CommonJsonModel(model.Value);if (!submodel.IsCollection())return null;elsereturn submodel;}}return null;}/// <summary>/// 模型是集合,返回自身/// </summary>/// <returns></returns>public List<CommonJsonModel> GetCollection(){List<CommonJsonModel> list = new List<CommonJsonModel>();if (IsValue())return list;foreach (string subjson in base._GetCollection(rawjson)){list.Add(new CommonJsonModel(subjson));}return list;}/// <summary>/// 当模型是值对象,返回key/// </summary>private string Key{get{if (IsValue())return base._GetKey(rawjson);return null;}}/// <summary>/// 当模型是值对象,返回value/// </summary>private string Value{get{if (!IsValue())return null;return base._GetValue(rawjson);}}}
}

View Code

  解析类父类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace BPMS.WEB.Common
{public class CommonJsonModelAnalyzer{protected string _GetKey(string rawjson){if (string.IsNullOrEmpty(rawjson))return rawjson;rawjson = rawjson.Trim();string[] jsons = rawjson.Split(new char[] { ':' });if (jsons.Length < 2)return rawjson;return jsons[0].Replace("\"", "").Trim();}protected string _GetValue(string rawjson){if (string.IsNullOrEmpty(rawjson))return rawjson;rawjson = rawjson.Trim();string[] jsons = rawjson.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);if (jsons.Length < 2)return rawjson;StringBuilder builder = new StringBuilder();for (int i = 1; i < jsons.Length; i++){builder.Append(jsons[i]);builder.Append(":");}if (builder.Length > 0)builder.Remove(builder.Length - 1, 1);string value = builder.ToString();if (value.StartsWith("\""))value = value.Substring(1);if (value.EndsWith("\""))value = value.Substring(0, value.Length - 1);return value;}protected List<string> _GetCollection(string rawjson){//[{},{}]List<string> list = new List<string>();if (string.IsNullOrEmpty(rawjson))return list;rawjson = rawjson.Trim();StringBuilder builder = new StringBuilder();int nestlevel = -1;int mnestlevel = -1;for (int i = 0; i < rawjson.Length; i++){if (i == 0)continue;else if (i == rawjson.Length - 1)continue;char jsonchar = rawjson[i];if (jsonchar == '{'){nestlevel++;}if (jsonchar == '}'){nestlevel--;}if (jsonchar == '['){mnestlevel++;}if (jsonchar == ']'){mnestlevel--;}if (jsonchar == ',' && nestlevel == -1 && mnestlevel == -1){list.Add(builder.ToString());builder = new StringBuilder();}else{builder.Append(jsonchar);}}if (builder.Length > 0)list.Add(builder.ToString());return list;}}
}

View Code

 示例

这里 注意点  要传json数组进来

[{
"键": [ { } ],
"键": [{ } ]
}]

要替换掉json内所有空格   Replace(" ","") ,Replace(Json, @"\r\n", "")

如果 json   键值对    传进来的值中  含有 ','  隔开的值 则 需用 其他符号 替代  否则 取值时  取不全!

         public string ImportData(string Json){StringBuilder sbStr = new StringBuilder();CommonJsonModel model = new CommonJsonModel(Regex.Replace(Json, @"\r\n", ""));List<CommonJsonModel> lst = model.GetCollection();foreach (CommonJsonModel item in lst){#regionstring ImgList = item.GetValue("ImgList");CommonJsonModel modelImgList = new CommonJsonModel(Regex.Replace(ImgList, @"\r\n", ""));List<CommonJsonModel> lstImgList = modelImgList.GetCollection();List<string> sqlDelImgList = new List<string>();List<string> sqlInserImgList = new List<string>();foreach (CommonJsonModel itemImgList in lstImgList){string ID = itemImgList.GetValue("ID");//if (ID != "0") {sqlDelImgList.Add(string.Format("DELETE FROM MR_Img  WHERE AppID={0}",ID));}string Img = itemImgList.GetValue("Img");string Describe = itemImgList.GetValue("Describe");string sqlInsertImg = string.Format("INSERT INTO MR_Img([FilePathe],[Small_FilePathe],[Describe],[AppID]) VALUES('{0}','{1}','{2}',{3})", Img, Img, Describe, ID);sqlInserImgList.Add(sqlInsertImg);}int ictDelImg = DBHelper.ExecuteSqlTran(sqlDelImgList);//int ictImg = DBHelper.ExecuteSqlTran(sqlInserImgList);#endregion#region string ExamineItem = item.GetValue("ExamineItem");CommonJsonModel modelExamineItem = new CommonJsonModel(Regex.Replace(ExamineItem, @"\r\n", ""));List<CommonJsonModel> lstExamineItem = modelExamineItem.GetCollection();List<string> sqlDelExamineItemList = new List<string>();List<string> sqlInsExamineItemList = new List<string>();foreach (CommonJsonModel itemExamineItem in lstExamineItem){string ID = itemExamineItem.GetValue("ID");if (ID != "0") {sqlDelExamineItemList.Add(string.Format("DELETE FROM MR_Check_Details  where AppID={0}",ID));}string ExamineID = itemExamineItem.GetValue("ExamineID"); string FloorList = itemExamineItem.GetValue("FloorList");string Danger = itemExamineItem.GetValue("Danger");  string Imgs = itemExamineItem.GetValue("Imgs");     string NewImgs = ""; if (Imgs != "" || Imgs != "0"){string imgids = Imgs.Replace("&",",");string sqlQueryImgsID = string.Format("SELECT [ID] FROM MR_Img  WHERE AppID IN({0})", imgids);DataTable dtImgsID = DBHelper.ExecuteDataTable(sqlQueryImgsID, CommandType.Text);if (dtImgsID != null && dtImgsID.Rows.Count > 0){foreach (DataRow ImsIdRow in dtImgsID.Rows){NewImgs = NewImgs + "," + ImsIdRow["ID"];}}}string Item_ID = itemExamineItem.GetValue("Item_ID");string Remarks = itemExamineItem.GetValue("Remarks"); string Refuse = itemExamineItem.GetValue("Refuse");string RefuseName = itemExamineItem.GetValue("RefuseName");string sqlInsCheck_Details = string.Format("INSERT INTO MR_Check_Details ([Item_ID],[Danger],[Complete_Time],[Imgs],[Remarks],[Refuse],[RefuseName],[ExamID],[FloorList],[AppID]) VALUES({0},{1},getdate(),'{2}','{3}',{4},'{5}',{6},'{7}',{8})", Item_ID, Danger, NewImgs.Trim(','), Remarks, Refuse, RefuseName, ExamineID, FloorList, ID);sqlInsExamineItemList.Add(sqlInsCheck_Details);}int ictdelExamineItemList = DBHelper.ExecuteSqlTran(sqlDelExamineItemList);int ictExamineItemList = DBHelper.ExecuteSqlTran(sqlInsExamineItemList);#endregion#region string BuildList = item.GetValue("BuildList");CommonJsonModel modelBuildList = new CommonJsonModel(Regex.Replace(BuildList, @"\r\n", ""));List<CommonJsonModel> lstBuildList = modelBuildList.GetCollection();List<string> sqlUpBuidList = new List<string>();foreach (CommonJsonModel itemBuildList in lstBuildList){string ID = itemBuildList.GetValue("ID");string Name = itemBuildList.GetValue("Name");string Contact = itemBuildList.GetValue("Contact");string Mobile = itemBuildList.GetValue("Mobile");string OwnerName = itemBuildList.GetValue("OwnerName");string OwnerMobile = itemBuildList.GetValue("OwnerMobile");string User_ID = itemBuildList.GetValue("User_ID");string Doorplate = itemBuildList.GetValue("Doorplate");string Address = itemBuildList.GetValue("Address");string FloorNum = itemBuildList.GetValue("FloorNum");string UpBuild = string.Format("UPDATE MR_Building SET [Name] ='{0}',[Contact] = '{1}',[Mobile] = '{2}',[OwnerName] = '{3}',[OwnerMobile] = '{4}',[User_ID] = {5},[Doorplate] = '{6}',[Address] ='{7}',[FloorNum] ={8} WHERE ID={9}", Name, Contact, Mobile, OwnerName, OwnerMobile, User_ID, Doorplate, Address, FloorNum, ID);sqlUpBuidList.Add(UpBuild);}int ictUpBuidList = DBHelper.ExecuteSqlTran(sqlUpBuidList);#endregion#region int ictBuildExamine = 0;string BuildExamine = item.GetValue("BuildExamine");CommonJsonModel modelBuildExamine = new CommonJsonModel(Regex.Replace(BuildExamine, @"\r\n", ""));List<CommonJsonModel> lstBuildExamine = modelBuildExamine.GetCollection();foreach (CommonJsonModel itemBuildExamine in lstBuildExamine){string ID = itemBuildExamine.GetValue("ID");string BID = itemBuildExamine.GetValue("BID");string NewDanger = "";string Danger = itemBuildExamine.GetValue("Danger");if (Danger != "" || Danger != "0"){string DangerIds = Danger.Replace("&", ",");string sqlQBuidDanger = string.Format("SELECT ID FROM MR_Check_Details  where AppID in ({0})", DangerIds);DataTable dtBuildDanger = DBHelper.ExecuteDataTable(sqlQBuidDanger, CommandType.Text);if (dtBuildDanger != null && dtBuildDanger.Rows.Count > 0){foreach (DataRow BuildDangerRow in dtBuildDanger.Rows){NewDanger = NewDanger + "," + BuildDangerRow["ID"];}}}string RemarkType = itemBuildExamine.GetValue("RemarkType");string Remark = itemBuildExamine.GetValue("Remark");string Remark2 = itemBuildExamine.GetValue("Remark2");string Complete_Time = itemBuildExamine.GetValue("Complete_Time");string UserID = itemBuildExamine.GetValue("UserID");ictBuildExamine += LxAddCheckBuild(BID, NewDanger.Trim(','), Remark, Remark2, Complete_Time, UserID);}#endregion#region string StreetList = item.GetValue("StreetList");CommonJsonModel modelStreetList = new CommonJsonModel(Regex.Replace(StreetList, @"\r\n", ""));List<CommonJsonModel> lstStreetList = modelStreetList.GetCollection();List<string> SqlUpSteetList = new List<string>();foreach (CommonJsonModel itemStreetList in lstStreetList){string ID = itemStreetList.GetValue("ID");string Name = itemStreetList.GetValue("Name");string Address = itemStreetList.GetValue("Address");string Type = itemStreetList.GetValue("Type");string Business = itemStreetList.GetValue("Business");string Layer = itemStreetList.GetValue("Layer");string Acreage = itemStreetList.GetValue("Acreage");string Has_Business = itemStreetList.GetValue("Has_Business");string Owner_Name = itemStreetList.GetValue("Owner_Name");string Phone = itemStreetList.GetValue("Phone");string Run_Name = itemStreetList.GetValue("Run_Name");string Run_Phone = itemStreetList.GetValue("Run_Phone");string Place_x = itemStreetList.GetValue("Place_x");string place_y = itemStreetList.GetValue("place_y");string UserID = itemStreetList.GetValue("UserID");string Extinguisher_Num = itemStreetList.GetValue("Extinguisher_Num");string Emergency_Num = itemStreetList.GetValue("Emergency_Num");string Alertor_Num = itemStreetList.GetValue("Alertor_Num");string UpSteet = string.Format("UPDATE MR_Street SET [Name] = '{0}',[Type] = {1},[Address] = '{2}',[Business] = '{3}' ,[Layer]='{4}',[Acreage] ={5},[Has_Business] ='{6}',[Owner_Name] = '{7}',[Phone] ='{8}',[Run_Name] = '{9}',[Run_Phone] = '{10}',[Place_x] = {11},[place_y] = '{12}',[UserID] = {13} WHERE Id={14}", Name, Type, Address, Business, Layer, Acreage, Has_Business, Owner_Name, Phone, Run_Name, Run_Phone, Place_x, place_y, UserID,ID);SqlUpSteetList.Add(UpSteet);string UpSteetDeal = string.Format("UPDATE MR_Street_Detail SET [Extinguisher_Num] = {0},[Emergency_Num] = {1} ,[Alertor_Num] ={2} WHERE SID={3}",Extinguisher_Num,Emergency_Num,Alertor_Num,ID);SqlUpSteetList.Add(UpSteetDeal);}int ictUpSteetList=DBHelper.ExecuteSqlTran(SqlUpSteetList);#endregion#region string StreetExamine = item.GetValue("StreetExamine");CommonJsonModel modelStreetExamine = new CommonJsonModel(Regex.Replace(StreetExamine, @"\r\n", ""));List<CommonJsonModel> lstStreetExamine = modelStreetExamine.GetCollection();int ictStreetExamine = 0;foreach (CommonJsonModel itemStreetExaminee in lstStreetExamine){// string ID = itemStreetExaminee.GetValue("ID");string SID = itemStreetExaminee.GetValue("SID");string NewDanger = "";string Danger = itemStreetExaminee.GetValue("Danger");if (Danger != "" || Danger != "0"){string DangerIds = Danger.Replace("&", ",");string sqlQStreetDanger = string.Format("SELECT ID FROM MR_Check_Details  where AppID in ({0})", DangerIds);DataTable dtStreetDanger = DBHelper.ExecuteDataTable(sqlQStreetDanger, CommandType.Text);if (dtStreetDanger != null && dtStreetDanger.Rows.Count > 0){foreach (DataRow StreetDangerRow in dtStreetDanger.Rows){NewDanger = NewDanger + "," + StreetDangerRow["ID"];}}}string RemarkType = itemStreetExaminee.GetValue("RemarkType");string Remark = itemStreetExaminee.GetValue("Remark");string Remark2 = itemStreetExaminee.GetValue("Remark2");string Complete_Time = itemStreetExaminee.GetValue("Complete_Time");string UserID = itemStreetExaminee.GetValue("UserID");ictStreetExamine+= LxAddCheckNew(SID, NewDanger.Trim(','), RemarkType, Remark, Remark2, Complete_Time, UserID);}#endregion}return "";}

  

转载于:https://www.cnblogs.com/jiebo/p/4627196.html

c#解析Josn(解析多个子集,数据,可解析无限级json)相关推荐

  1. Android系统(96)---Android 数据交换解析框架Gson使用详解

    Android 数据交换解析框架Gson使用详解 Json 是一种文本形式的数据交换格式,比 xml 更为轻量.Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 ...

  2. JavaScript——JSON数据和解析

    1.JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式.它基于 ECMAScript(European Computer Manufacture ...

  3. js html 处理json数据,js 解析JSON数据

    链接原文转自:http://www.w3cschool.cn/json/xumd1piw.html http://www.cnblogs.com/zoumiaomiao/p/4909539.html ...

  4. ajax请求json和xml数据及对json和xml格式数据的解析

    ajax请求json和xml数据及对json和xml格式数据的解析 一.ajax请求json数据并解析 ajax的写法: json数据解析: 请求json经常出现的跨域报错: 二.ajax请求xml数 ...

  5. IOS中的JSON数据的解析

    解析Json数据 1 //加载.json文件 2 NSString *path = [[NSBundle mainBundle]pathForResource:@"product.json& ...

  6. angularjs与java_关于angularjs与java结合,获取后台数据并解析的问题

    我在java后台的controller中获取了数据库的数据,想在前台通过angularjs解析 controller中的方法如下: @Controller @RequestMapping(" ...

  7. Android开发--Json数据的解析

    在执行解析数据之前,需要将一个类库应用到你的程序中,下载的地址是: http://code.google.com/p/google-gson/ 下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用 ...

  8. Python 获取接口数据,解析JSON,写入文件

    Python 获取接口数据,解析JSON,写入文件 用于练手的例子,从国家气象局接口上获取JSON数据,将它写入文件中,并解析JSON: 总的来说,在代码量上,python代码量要比java少很多.而 ...

  9. python如何爬虫网页数据-python爬虫——爬取网页数据和解析数据

    1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序. 只要浏览器能够做的事情,原则上,爬虫都能够做到. ...

  10. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

最新文章

  1. 整数转换为罗马数字 Integer to Roman
  2. java 判断网络类型_Android 网络类型判断(2g、3g、wifi)及IP地址获取
  3. 计算机网络学习--交换机和路由器转发数据原理
  4. 在Amilal听杭盖乐队演唱
  5. 2021-08-08
  6. Python学习16 正则表达式3 练习题
  7. 安装LR11,到执行产品配置时,停止不动了
  8. 比特币余额大于1BTC的地址数量较二月下降5048个
  9. kafka入门综合概要介绍
  10. mediawiki初学心得及使用方法
  11. 解决JSP路径问题的方法(jsp文件开头path, basePath作用)
  12. 操作系统读写者问题实验报告_Linux操作系统存储子系统核心技术之硬盘与RAID
  13. Using Flume要点
  14. 多小区下小区上行速率的计算的想法
  15. 《模拟电子技术》清华大学华成英教授主讲
  16. _beginthread 与 _endthread 函数分析 (ReactOS版)
  17. 开源公告|腾讯 PAG 动画组件对外开源
  18. 【字符串】13. 罗马数字转整数
  19. java------jdkd的安装与配置变量环境
  20. 从Scrum之父探源敏捷方法论

热门文章

  1. Java中实现精确的浮点数运算
  2. python3-扫雷网页版
  3. python 拍照搜题_直播答题?Python助你自动搜题赢百万!
  4. 最好用的 6 款 Vue 拖拽组件库推荐 - 卡拉云
  5. DSP28335的CAN总线通讯
  6. 通过防火墙策略解决k8s中ng端口漏洞
  7. 2019 年度最受欢迎中国开源软件
  8. latex 因为所以,编号序号:圈1,圈一,公式编号(式子序号$\tag{}$)
  9. python 爬取网页 通知消息_python简单爬取页面信息及实现打开、关闭浏览器
  10. java- - Object所有类的超类