首先引用 解析类库

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;
else
return 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;
else
return 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);
}
}
}
}

  解析类父类

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 < )
return rawjson;
return jsons[].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 < )
return rawjson;
StringBuilder builder = new StringBuilder();
for (int i = ; i < jsons.Length; i++)
{
builder.Append(jsons[i]);
builder.Append(":");
}
if (builder.Length > )
builder.Remove(builder.Length - , );
string value = builder.ToString();
if (value.StartsWith("\""))
value = value.Substring();
if (value.EndsWith("\""))
value = value.Substring(, value.Length - );
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 = -;
int mnestlevel = -;
for (int i = ; i < rawjson.Length; i++)
{
if (i == )
continue;
else if (i == rawjson.Length - )
continue;
char jsonchar = rawjson[i];
if (jsonchar == '{')
{
nestlevel++;
}
if (jsonchar == '}')
{
nestlevel--;
}
if (jsonchar == '[')
{
mnestlevel++;
}
if (jsonchar == ']')
{
mnestlevel--;
}
if (jsonchar == ',' && nestlevel == - && mnestlevel == -)
{
list.Add(builder.ToString());
builder = new StringBuilder();
}
else
{
builder.Append(jsonchar);
}
}
if (builder.Length > )
list.Add(builder.ToString());
return list;
}
}
}

 示例

这里 注意点  要传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)
{
#region
string 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 "";
}

  

c#解析Josn(解析多个子集,数据,可解析无限级json)的更多相关文章

  1. java后台对json格式数据的解析

    Json 和 Jsonlib 的使用 什么是 Json JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式 ...

  2. UI:数据的解析XML与JSON

    XML  和  JSON 语言  本篇博客来自互联网参考 XML 和 JSON 的互相转化 有属性的转化为对象,无属性的转化为字符串 节点的顺序性不可逆,XML有顺序,JSON 无顺序 XML 和 J ...

  3. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

  4. NPOI操作EXCEL(三)——反射机制进行excel表格数据的解析

    我们先来回忆回忆上篇文章讲到的通过xml配置文件实现excel批量模板解析的整体思路: 1.对每个excel模板制定xml配置规则集,实现xml配置文件的解析服务 2.为每个excel模板制定DTO, ...

  5. XML数据的解析

    XML数据的解析 相比于JSON数据解析而言,XML数据解析可能会让更多的童鞋感觉到吃力,对我来说,同样认为JSON数据好像让人感觉比较友好,不过对于程序开发者来说,无非就是这两种数据解析占比较大的部 ...

  6. SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题

    原因分析 首先我们来看下Spring mvc 中文件上传的配置 <bean id="multipartResolver" class="org.springfram ...

  7. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

  8. jq 解析josn字符串

    1. var obj = jQuery.parseJSON("${ruleModel.rules}"); 2. var obj = eval("("+" ...

  9. json和xml数据的解析

    一 json数据 1一条json就像一个对象,也想像OC中的数组,且内嵌了很多键值对字典 {"name" : "jack", "age" : ...

  10. android基础---->JSON数据的解析

    上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...

随机推荐

  1. Javascript注意事项三【使用假值】

    0 //NumberNaN //Number'' //Stringfalse //Booleannull //Objectundefined //Undefined这些值全部都等同于false,但是它 ...

  2. SQL 索引

    1.http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html 2 .聚簇索引和非聚簇索引的区别 3.聚集索引:只能有一个  (相当于字 ...

  3. github快速入门(一)

    一.github介绍 git是一款非常知名的代码托管工具.当然现在有了github for windows版本(类似于 svn tortoise). GitHub for Windows 是一个 Me ...

  4. 提高你的Java代码质量吧:少用静态导入

    一.分析  从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序. 但是,滥用静态导入会使程序更难阅读,更难维护.静态导 ...

  5. centos yum安装mysql

    查看有没有安装包 # yum list mysql 安装mysql客户端 # yum install mysql # yum list mysql-server 安装mysql 服务器端 # yum ...

  6. ios中UIButton选中状态切换

    关于UIButton的事件枚举有许多,平时用的少所以很多的都不是很清楚,今天了解了下,看了以前的代码,觉得在UIButton选中时操作写了许多冗余代码,而忽略了UIButton一个很重要的属性,如下: ...

  7. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  8. pomelo 初始化配置...

    在创建app的时候会初始化master和server以及log配置.. /** * Initialize application configuration. */ module.exports.de ...

  9. hdu 3732 Ahui Writes Word

    这是一道背包题,当你题读完了的时候,你会觉得这道题明明就是01背包的完全版吗! no no no no no no  no no  no no no~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  10. Asp.Net 之 未能加载文件或程序集 system.web.extensions 解决方法

    最近做项目发现未能加载文件或程序集的错误,这是由于我的机器上没有安装Ajax的原因.问题解决后,整理如下:表现:1."System.Web.Extensions, Version=1.0.61025. ...