C使用Newtonsoft不创建实体对象解析Json字符串

C使用Newtonsoft不创建实体对象解析Json字符串一 使用 Newtonsoft 不创建实体对象解析 Json 字符串的示例演示 1 1 首先需要引用命名空间 using Newtonsoft Json using Newtonsoft Json Linq using System Collections Hashtable 所需的命名空间 1 2 解析首尾不带中括号 的 Json 字符串 1 2 1 核心的解析方法如下

大家好,我是讯享网,很高兴认识大家。

一、使用Newtonsoft不创建实体对象解析Json字符串的示例演示

1.1、首先需要引用命名空间

using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections;//Hashtable所需的命名空间

讯享网

1.2、解析首尾不带中括号[]的Json字符串

1.2.1、核心的解析方法如下

讯享网 /// <summary> /// 解析Json字符串(首尾没有中括号)【线程安全】 /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析好的Hashtable表</returns> private static Hashtable AnalayJsonString(string jsonStr) { Hashtable ht = new Hashtable(); if (!string.IsNullOrEmpty(jsonStr)) { JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr); foreach (var item in jo) { ht.Add(item.Key,item.Value); } } return ht; }

 1.2.2、调用示例1如下:

 string strTmp = "{\"10101\":\"北京\",\"10102\":\"上海\"}"; Hashtable ht = AnalayJsonString(strTmp); foreach (DictionaryEntry item in ht) { Console.WriteLine(item.Key + " " + item.Value); } 

1.2.3、解析示例1结果如下:

讯享网

1.2.4、调用示例2如下:

讯享网 string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"},\"shanghai\":{\"zone\":\"浦东\",\"zone_en\":\"pudong\"}}"; Hashtable ht = AnalayJsonString(jsonText); foreach (DictionaryEntry item in ht) { Console.WriteLine(item.Key); Hashtable ht2 = AnalayJsonString(item.Value.ToString()); foreach (DictionaryEntry item2 in ht2) { Console.WriteLine(" "+item2.Key + " " + item2.Value); } } 

1.2.5、解析示例2结果如下:

1.2.6、解析指定键对应的值

①核心解析方法如下:

 /// <summary> /// 解析Json字符串为JObject(首尾没有中括号) /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析后的JObject对象</returns> private static JObject AnalayJsonStringToObj(string jsonStr) { if (!string.IsNullOrEmpty(jsonStr)) { string strJsonIndex = string.Empty; JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr); return jo; } else { return null; } }

②解析示例1如下:

讯享网 static void Main(string[] args) { string jsonText = "{\"10101\":\"北京\",\"10102\":\"上海\"}"; JObject strTmp = AnalayJsonStringToObj(jsonText); Console.WriteLine("---解析结果为---"+strTmp["10101"]); Console.ReadLine(); } 

③运行示例1结果如下:

④解析示例2如下:

 static void Main(string[] args) { string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"},\"shanghai\":{\"zone\":\"浦东\",\"zone_en\":\"pudong\"}}"; JObject strTmp = AnalayJsonStringToObj(jsonText); Console.WriteLine("---解析结果为---"+strTmp["beijing"]["zone"]); Console.ReadLine(); }

⑤运行示例2结果如下:

 

 

 

 

1.3、解析首不带中括号[]的Json字符串

1.3.1、首先去除该Json字符串的首尾中括号,然后采用【1.2、解析首尾不带中括号[]的Json字符串】方法解析

讯享网 static void Main(string[] args) { string strTmp = "[{\"10101\":\"北京\",\"10102\":\"上海\"}]"; //提取字符串中中括号里面的内容 string strHanle = NumberOrStringOPC.GetBracketsContents(strTmp,1); //解析不带中括号Json字符串 Hashtable ht = AnalayJsonString(strHanle); foreach (DictionaryEntry item in ht) { Console.WriteLine(item.Key + " " + item.Value); } Console.WriteLine("---------解析完成-------------"); Console.ReadLine(); } /// <summary> /// 解析Json字符串(首尾没有中括号) /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析好的Hashtable表</returns> private static Hashtable AnalayJsonString(string jsonStr) { Hashtable ht = new Hashtable(); if (!string.IsNullOrEmpty(jsonStr)) { JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr); foreach (var item in jo) { ht.Add(item.Key,item.Value); } } return ht; } class NumberOrStringOPC { #region 提取括号里面的内容 /// <summary> /// 提取小括号、中括号、大括号里面的字符串内容 /// </summary> /// <param name="strNeedOPC">需要处理的字符串</param> /// <param name="bracketsType">括号的类型【0表示小括号1表示中括号2表示大括号】</param> /// <returns></returns> public static string GetBracketsContents(string strNeedOPC,int bracketsType=0) { string strTmp = string.Empty; if (!string.IsNullOrEmpty(strNeedOPC)) { switch (bracketsType) { case 0: strTmp = Regex.Replace(strNeedOPC, @"(.*\()(.*)(\).*)", "$2");//获取小括号()里面的内容 break; case 1: Regex rex = new Regex(@"(?i)(?<=\[)(.*)(?=\])");//获取中括号[]里面的内容正则规则 strTmp = rex.Match(strNeedOPC).Value; break; case 2: strTmp= Regex.Match(strNeedOPC, @"\{(.*)\}", RegexOptions.Singleline).Groups[1].Value;//获取大括号{}里面的内容 break; default: break; } } return strTmp; } #endregion }

运行结果如下:

1.3.2、直接进行解析

核心解析方法

 /// <summary> /// 解析Json字符串(首尾有中括号)【线程安全】 /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析好的Hashtable表</returns> private static Hashtable AnalayJsonStringMiddleBrackets(string jsonStr) { Hashtable ht = new Hashtable(); if (!string.IsNullOrEmpty(jsonStr)) { JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组 if (jArray != null && jArray.Count > 0) { foreach (var item in jArray) { foreach (JToken jToken in item) { string[] strTmp = jToken.ToString().Split(':'); ht.Add(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", "")); } } } } return ht; }

解析示例 

讯享网 static void Main(string[] args) { string strTmp = "[{\"10101\":\"北京\",\"10102\":\"上海\"}]"; //解析带中括号Json字符串 Hashtable ht = AnalayJsonStringMiddleBrackets(strTmp); foreach (DictionaryEntry item in ht) { Console.WriteLine(item.Key + " " + item.Value); } Console.WriteLine("---------解析完成-------------"); Console.ReadLine(); } 

运行结果如下:

1.3.3、解析指定键对应的值

①核心方法如下:

 /// <summary> /// 解析Json字符串为JArray(首尾有中括号) /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析后的JArray对象</returns> private static JArray AnalayJsonStringToJArray(string jsonStr) { if (!string.IsNullOrEmpty(jsonStr)) { string strJsonIndex = string.Empty; JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr); return ja; } else { return null; } } 

②解析示例如下:

讯享网 static void Main(string[] args) { string jsonText = "[{\"10101\":\"北京\",\"10102\":\"上海\"}]"; JArray strTmp = AnalayJsonStringToJArray(jsonText); Console.WriteLine("---解析结果为---"+strTmp[0]["10101"]); Console.ReadLine(); }

 ③运行结果如下:

 

二、使用Newtonsoft不创建实体对象解析Json字符串的通用类

注意:需要引用Newtonsoft.dll

其中Newtonsoft.dll库的官方下载链接为:微软官方指定Newtonsoft库下载地址

 using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections; class AnalayJson { #region 解析Json字符串(首尾没有中括号) /// <summary> /// 解析Json字符串(首尾没有中括号)【线程安全】 /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析好的Hashtable表</returns> public static Hashtable AnalayJsonString(string jsonStr) { Hashtable ht = new Hashtable(); if (!string.IsNullOrEmpty(jsonStr)) { JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr); foreach (var item in jo) { ht.Add(item.Key, item.Value); } } return ht; } /// <summary> /// 解析Json字符串为JObject(首尾没有中括号) /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析后的JObject对象</returns> public static JObject AnalayJsonStringToJObject(string jsonStr) { if (!string.IsNullOrEmpty(jsonStr)) { string strJsonIndex = string.Empty; JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr); return jo; } else { return null; } } #endregion #region 解析Json字符串(首尾有中括号) /// <summary> /// 解析Json字符串(首尾有中括号)【线程安全】 /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析好的Hashtable表</returns> public static Hashtable AnalayJsonStringMiddleBrackets(string jsonStr) { Hashtable ht = new Hashtable(); if (!string.IsNullOrEmpty(jsonStr)) { JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组 if (jArray != null && jArray.Count > 0) { foreach (var item in jArray) { foreach (JToken jToken in item) { string[] strTmp = jToken.ToString().Split(':'); ht.Add(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", "")); } } } } return ht; } /// <summary> /// 解析Json字符串为JArray(首尾有中括号) /// </summary> /// <param name="jsonStr">需要解析的Json字符串</param> /// <returns>返回解析后的JArray对象</returns> public static JArray AnalayJsonStringMiddleBracketsToJArray(string jsonStr) { if (!string.IsNullOrEmpty(jsonStr)) { string strJsonIndex = string.Empty; JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr); return ja; } else { return null; } } #endregion } 

 

 

 

 

 

 

 

 

 

 

 

小讯
上一篇 2025-02-07 07:48
下一篇 2025-04-08 23:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/67316.html