C#笔记6——操作JSON(Newtonsoft)


      最近整理了一些C# JSON的处理方法,大致如下:

1--创建json对象
2--创建json数组
3--查询
4--修改
5--删除
6--添加
7--简化查询
8--删除列表里的a节点的值为aa的项
9--json其它用法

      注意:使用该方法的时候需引用Newtonsoft.Json库文件,请在官网(http://www.newtonsoft.com/json)下载
      以上是整理的一些常用JSON处理方法,后续将继续补充!
代码如下:

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. using System.IO; //StringReader  
  8.   
  9. using Newtonsoft.Json;  
  10. using Newtonsoft.Json.Linq;  
  11. using Newtonsoft.Json.Converters;//IsoDateTimeConverter  
  12.   
  13. namespace json1  
  14. {  
  15.     class Program  
  16.     {  
  17.         static void Main(string[] args)  
  18.         {  
  19.  
  20.             #region 创建json对象  
  21.               
  22.             Console.WriteLine("\n\n1--创建json对象:");  
  23.             JObject staff = new JObject();  
  24.             staff.Add(new JProperty("Name""Jack"));//等价于staff.Add("Name","Jack");  
  25.             staff.Add(new JProperty("Age", 33));  
  26.             staff.Add(new JProperty("Department""Personnel Department"));  
  27.             staff.Add(new JProperty("Leader"new JObject(new JProperty("Name""Tom"), new JProperty("Age", 44), new JProperty("Department""Personnel Department"))));  
  28.             Console.WriteLine(staff.ToString());  
  29.              
  30.             #endregion  
  31.  
  32.             #region 创建json数组  
  33.   
  34.             Console.WriteLine("\n\n2--创建json数组:");  
  35.             JArray arr = new JArray();  
  36.             arr.Add(new JValue(1));  
  37.             arr.Add(new JValue(2));  
  38.             arr.Add(new JValue(3));  
  39.             Console.WriteLine(arr.ToString());  
  40.  
  41.             #endregion  
  42.  
  43.             #region 查询  
  44.             Console.WriteLine("\n\n3--查询:");  
  45.             string json3 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";  
  46.             //将json转换为JObject  
  47.             JObject jObj = JObject.Parse(json3);  
  48.             #region 查询-获取某一员工的年龄  
  49.             Console.WriteLine("获取某一员工的年龄:");  
  50.             //通过属性名或者索引来访问,仅仅是自己的属性名,而不是所有的  
  51.             JToken ageToken = jObj["Age"];  
  52.             Console.WriteLine("age:" + ageToken.ToString());  
  53.             #endregion  
  54.             #region 查询-获取该员工所有同事的姓名  
  55.             Console.WriteLine("获取该员工所有同事的姓名:");  
  56.             var names = from staff1 in jObj["Colleagues"].Children()  
  57.                         select (string)staff1["Name"];  
  58.             //"Children()"可以返回所有数组中的对象  
  59.             foreach (var name in names)  
  60.                 Console.WriteLine(name);  
  61.             #endregion  
  62.             #endregion   
  63.  
  64.             #region 修改  
  65.             Console.WriteLine("\n\n4--修改:");  
  66.             string json4 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";  
  67.             //将json转换为JObject  
  68.             JObject jObj4 = JObject.Parse(json4);  
  69.             #region 修改--将jack年龄修改为35  
  70.             Console.WriteLine("修改--将jack年龄修改为35");  
  71.             jObj4["Age"] = 35;  
  72.             //JToken age =  
  73.             Console.WriteLine(jObj4.ToString());  
  74.             #endregion  
  75.             #region 修改--将jack同事tom年龄修改Wie45  
  76.             Console.WriteLine("\n修改--将jack同事tom年龄修改为45");  
  77.             JToken colleagues = jObj4["Colleagues"];//JToken 不用实例化  
  78.             colleagues[0]["Age"] = 45;  
  79.             jObj4["Colleagues"] = colleagues;//将修改后的赋值给json对象  
  80.             Console.WriteLine(jObj4.ToString());  
  81.             #endregion  
  82.             #endregion  
  83.  
  84.             #region 删除  
  85.             Console.WriteLine("\n\n5--删除:");  
  86.             string json5 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29},{\"Name\" : \"Jully\",\"Age\":23}] }";  
  87.             //将json转换为JObject  
  88.             JObject jObj5 = JObject.Parse(json5);  
  89.             #region 删除--删除同事Tom  
  90.             Console.WriteLine("删除--删除同事Tom");  
  91.             jObj5["Colleagues"][0].Remove();  
  92.             Console.WriteLine(jObj5.ToString());  
  93.             #endregion  
  94.             #region 删除--删除所有同事  
  95.             Console.WriteLine("\n删除--删除所有同事");  
  96.             jObj5.Remove("Colleagues");//跟的是属性名称  
  97.             Console.WriteLine(jObj5.ToString());  
  98.             #endregion  
  99.             #endregion  
  100.  
  101.             #region 添加  
  102.             Console.WriteLine("\n\n6--添加:");  
  103.             string json6 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29},{\"Name\" : \"Jully\",\"Age\":23}] }";  
  104.             //将json转换为JObject  
  105.             JObject jObj6 = JObject.Parse(json6);  
  106.             #region 发现Jack的信息中少了部门信息,要求我们必须添加在Age的后面  
  107.             Console.WriteLine("发现Jack的信息中少了部门信息,要求我们必须添加在Age的后面");  
  108.             jObj6["Age"].Parent.AddAfterSelf(new JProperty("Department""Personnel Department"));  
  109.             Console.WriteLine(jObj6.ToString());  
  110.             #endregion  
  111.             #region  添加一个新同事  
  112.             Console.WriteLine("\n添加一个新同事");  
  113.             JObject linda = new JObject(new JProperty("Name""Linda"), new JProperty("Age""23"));  
  114.             jObj6["Colleagues"].Last.AddAfterSelf(linda);  
  115.             Console.WriteLine(jObj6.ToString());  
  116.             #endregion  
  117.             #endregion  
  118.  
  119.             #region 简化查询  
  120.             Console.WriteLine("\n\n7--简化查询:");  
  121.             string json7 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29},{\"Name\" : \"Jully\",\"Age\":23}] }";  
  122.             //将json转换为JObject  
  123.             JObject jObj7 = JObject.Parse(json7);  
  124.             #region 利用SelectToken来查询名称  
  125.             Console.WriteLine("简化查询--利用SelectToken来查询名称");  
  126.             JToken name7 = jObj7.SelectToken("Name");  
  127.             Console.WriteLine(name7.ToString());  
  128.             #endregion  
  129.             #region 简化查询--利用SelectToken来查询所有同事的名字  
  130.             Console.WriteLine("\n简化查询--利用SelectToken来查询所有同事的名字");  
  131.             var names7 = jObj7.SelectToken("Colleagues").Select(p => p["Name"]).ToList();  
  132.             foreach (var theName in names7)  
  133.                 Console.WriteLine(theName.ToString());  
  134.             #endregion  
  135.             #region 简化查询--查询最后一名同事的年龄  
  136.             Console.WriteLine("\n简化查询--查询最后一名同事的年龄");  
  137.             var age = jObj7.SelectToken("Colleagues[2].Age");  
  138.             Console.WriteLine(age.ToString());  
  139.             #endregion  
  140.             #endregion  
  141.  
  142.             #region  删除列表里a节点的值为aa的项  
  143.             Console.WriteLine("\n\n8--删除列表里的a节点的值为aa的项:");  
  144.             string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aa','b':'bb','c':'cc'}]";  
  145.             var mJObj8 = JArray.Parse(jsonText);  
  146.             string str1 = mJObj8.ToString();  
  147.             Console.WriteLine("before delete:\n" + str1);  
  148.             IList<JToken> delList = new List<JToken>(); //存储需要删除的项  
  149.             foreach (var ss in mJObj8)  //查找某个字段与值  
  150.             {  
  151.                 if (((JObject)ss)["a"].ToString() == "aa")  
  152.                     delList.Add(ss);  
  153.             }  
  154.             foreach (var item in delList)  //移除mJObj  在delList 里的项  
  155.             {  
  156.                 mJObj8.Remove(item);  
  157.             }  
  158.             string str2 = mJObj8.ToString();  
  159.             Console.WriteLine("after delete:\n" + str2);  
  160.             #endregion  
  161.  
  162.             #region json其它用法  
  163.   
  164.             Console.WriteLine("\n\n9--json其它用法:");  
  165.             string jsonStr9_1 = @"  
  166.                 [{'Languages':['C#','Java'],'Name':'李志伟','Sex':true},  
  167.                 {'Languages':['C#','C++'],'Name':'Coder2','Sex':false},  
  168.                 {'Languages':['C#','C++','C','Java'],'Name':'Coder3','Sex':true}]";  
  169.             Console.WriteLine(jsonStr9_1);  
  170.  
  171.             #region 使用JsonTextReader类进行只进读取(不常用)  
  172.             Console.WriteLine("\n9_1--使用JsonTextReader类进行只进读取:");  
  173.             JsonTextReader json1 = new JsonTextReader(new StringReader(jsonStr9_1));  
  174.             while (json1.Read())  
  175.             {  
  176.                 Console.WriteLine(json1.Value + "--" + json1.TokenType + "--" + json1.ValueType);  
  177.             }  
  178.             #endregion  
  179.  
  180.  
  181.             #region 使用JArray、JObject、JToken进行读取(常用)  
  182.             Console.WriteLine("\n9_2--使用JArray、JObject、JToken进行读取:");  
  183.             string jsonStr9_2 = @"  
  184.                 [{'Languages':['C#','Java'],'Name':'李志伟','Sex':true},  
  185.                 {'Languages':['C#','C++'],'Name':'Coder2','Sex':false},  
  186.                 {'Languages':['C#','C++','C','Java'],'Name':'Coder3','Sex':true}]";  
  187.             var Jobj = JArray.Parse(jsonStr9_2);  
  188.             string mystr1 = Jobj.ToString();  
  189.             Console.WriteLine("this json:\n" + mystr1);  
  190.             JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr9_2);  
  191.             foreach (JToken jt in ja)  
  192.             {  
  193.                 JObject jo = (JObject)jt;  
  194.                 JArray temp = (JArray)jo["Languages"];  
  195.                 foreach (JToken token in temp)  
  196.                 {  
  197.                     Console.Write(token + " ");  
  198.                 }  
  199.                 Console.WriteLine("\t" + jo["Name"] + "\t" + jo["Sex"]);  
  200.             }  
  201.             #endregion  
  202.  
  203.             #region Json时间字符串的处理  
  204.             Console.WriteLine("\nJson9_3--时间字符串的处理:");  
  205.             DateTime time = DateTime.Now;  
  206.             //这里使用自定义日期格式  
  207.             IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();  
  208.             timeConverter.DateTimeFormat = "北京时间:yyyy-MM-dd HH:mm:ss";  
  209.             //序列化时间  
  210.             string JsonStr = JsonConvert.SerializeObject(time, timeConverter);  
  211.             Console.WriteLine(JsonStr);  
  212.             //反序列化时间  
  213.             DateTime time2 = JsonConvert.DeserializeObject<DateTime>(JsonStr, timeConverter);  
  214.             Console.WriteLine(time2);  
  215.             Console.WriteLine("\n\n");  
  216.             #endregion  
  217.  
  218.             #endregion  
  219.   
  220.         }  
  221.     }  
  222. }  


猜你喜欢

转载自blog.csdn.net/binnygoal/article/details/79715870