最近整理了一些C# JSON的處理方法,大致如下:
1--創建json對象
2--創建json數組
3--查詢
4--修改
5--刪除
6--添加
7--簡化查詢
8--刪除列表裏的a節點的值爲aa的項
9--json其它用法
注意:使用該方法的時候需引用Newtonsoft.Json庫文件,請在官網(http://www.newtonsoft.com/json)下載
以上是整理的一些常用JSON處理方法,後續將繼續補充!
代碼如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO; //StringReader
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using Newtonsoft.Json.Converters;//IsoDateTimeConverter
- namespace json1
- {
- class Program
- {
- static void Main(string[] args)
- {
- #region 創建json對象
- Console.WriteLine("\n\n1--創建json對象:");
- JObject staff = new JObject();
- staff.Add(new JProperty("Name", "Jack"));//等價於staff.Add("Name","Jack");
- staff.Add(new JProperty("Age", 33));
- staff.Add(new JProperty("Department", "Personnel Department"));
- staff.Add(new JProperty("Leader", new JObject(new JProperty("Name", "Tom"), new JProperty("Age", 44), new JProperty("Department", "Personnel Department"))));
- Console.WriteLine(staff.ToString());
- #endregion
- #region 創建json數組
- Console.WriteLine("\n\n2--創建json數組:");
- JArray arr = new JArray();
- arr.Add(new JValue(1));
- arr.Add(new JValue(2));
- arr.Add(new JValue(3));
- Console.WriteLine(arr.ToString());
- #endregion
- #region 查詢
- Console.WriteLine("\n\n3--查詢:");
- string json3 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";
- //將json轉換爲JObject
- JObject jObj = JObject.Parse(json3);
- #region 查詢-獲取某一員工的年齡
- Console.WriteLine("獲取某一員工的年齡:");
- //通過屬性名或者索引來訪問,僅僅是自己的屬性名,而不是所有的
- JToken ageToken = jObj["Age"];
- Console.WriteLine("age:" + ageToken.ToString());
- #endregion
- #region 查詢-獲取該員工所有同事的姓名
- Console.WriteLine("獲取該員工所有同事的姓名:");
- var names = from staff1 in jObj["Colleagues"].Children()
- select (string)staff1["Name"];
- //"Children()"可以返回所有數組中的對象
- foreach (var name in names)
- Console.WriteLine(name);
- #endregion
- #endregion
- #region 修改
- Console.WriteLine("\n\n4--修改:");
- string json4 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";
- //將json轉換爲JObject
- JObject jObj4 = JObject.Parse(json4);
- #region 修改--將jack年齡修改爲35
- Console.WriteLine("修改--將jack年齡修改爲35");
- jObj4["Age"] = 35;
- //JToken age =
- Console.WriteLine(jObj4.ToString());
- #endregion
- #region 修改--將jack同事tom年齡修改Wie45
- Console.WriteLine("\n修改--將jack同事tom年齡修改爲45");
- JToken colleagues = jObj4["Colleagues"];//JToken 不用實例化
- colleagues[0]["Age"] = 45;
- jObj4["Colleagues"] = colleagues;//將修改後的賦值給json對象
- Console.WriteLine(jObj4.ToString());
- #endregion
- #endregion
- #region 刪除
- Console.WriteLine("\n\n5--刪除:");
- string json5 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29},{\"Name\" : \"Jully\",\"Age\":23}] }";
- //將json轉換爲JObject
- JObject jObj5 = JObject.Parse(json5);
- #region 刪除--刪除同事Tom
- Console.WriteLine("刪除--刪除同事Tom");
- jObj5["Colleagues"][0].Remove();
- Console.WriteLine(jObj5.ToString());
- #endregion
- #region 刪除--刪除所有同事
- Console.WriteLine("\n刪除--刪除所有同事");
- jObj5.Remove("Colleagues");//跟的是屬性名稱
- Console.WriteLine(jObj5.ToString());
- #endregion
- #endregion
- #region 添加
- Console.WriteLine("\n\n6--添加:");
- string json6 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29},{\"Name\" : \"Jully\",\"Age\":23}] }";
- //將json轉換爲JObject
- JObject jObj6 = JObject.Parse(json6);
- #region 發現Jack的信息中少了部門信息,要求我們必須添加在Age的後面
- Console.WriteLine("發現Jack的信息中少了部門信息,要求我們必須添加在Age的後面");
- jObj6["Age"].Parent.AddAfterSelf(new JProperty("Department", "Personnel Department"));
- Console.WriteLine(jObj6.ToString());
- #endregion
- #region 添加一個新同事
- Console.WriteLine("\n添加一個新同事");
- JObject linda = new JObject(new JProperty("Name", "Linda"), new JProperty("Age", "23"));
- jObj6["Colleagues"].Last.AddAfterSelf(linda);
- Console.WriteLine(jObj6.ToString());
- #endregion
- #endregion
- #region 簡化查詢
- Console.WriteLine("\n\n7--簡化查詢:");
- string json7 = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29},{\"Name\" : \"Jully\",\"Age\":23}] }";
- //將json轉換爲JObject
- JObject jObj7 = JObject.Parse(json7);
- #region 利用SelectToken來查詢名稱
- Console.WriteLine("簡化查詢--利用SelectToken來查詢名稱");
- JToken name7 = jObj7.SelectToken("Name");
- Console.WriteLine(name7.ToString());
- #endregion
- #region 簡化查詢--利用SelectToken來查詢所有同事的名字
- Console.WriteLine("\n簡化查詢--利用SelectToken來查詢所有同事的名字");
- var names7 = jObj7.SelectToken("Colleagues").Select(p => p["Name"]).ToList();
- foreach (var theName in names7)
- Console.WriteLine(theName.ToString());
- #endregion
- #region 簡化查詢--查詢最後一名同事的年齡
- Console.WriteLine("\n簡化查詢--查詢最後一名同事的年齡");
- var age = jObj7.SelectToken("Colleagues[2].Age");
- Console.WriteLine(age.ToString());
- #endregion
- #endregion
- #region 刪除列表裏a節點的值爲aa的項
- Console.WriteLine("\n\n8--刪除列表裏的a節點的值爲aa的項:");
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aa','b':'bb','c':'cc'}]";
- var mJObj8 = JArray.Parse(jsonText);
- string str1 = mJObj8.ToString();
- Console.WriteLine("before delete:\n" + str1);
- IList<JToken> delList = new List<JToken>(); //存儲需要刪除的項
- foreach (var ss in mJObj8) //查找某個字段與值
- {
- if (((JObject)ss)["a"].ToString() == "aa")
- delList.Add(ss);
- }
- foreach (var item in delList) //移除mJObj 在delList 裏的項
- {
- mJObj8.Remove(item);
- }
- string str2 = mJObj8.ToString();
- Console.WriteLine("after delete:\n" + str2);
- #endregion
- #region json其它用法
- Console.WriteLine("\n\n9--json其它用法:");
- string jsonStr9_1 = @"
- [{'Languages':['C#','Java'],'Name':'李志偉','Sex':true},
- {'Languages':['C#','C++'],'Name':'Coder2','Sex':false},
- {'Languages':['C#','C++','C','Java'],'Name':'Coder3','Sex':true}]";
- Console.WriteLine(jsonStr9_1);
- #region 使用JsonTextReader類進行只進讀取(不常用)
- Console.WriteLine("\n9_1--使用JsonTextReader類進行只進讀取:");
- JsonTextReader json1 = new JsonTextReader(new StringReader(jsonStr9_1));
- while (json1.Read())
- {
- Console.WriteLine(json1.Value + "--" + json1.TokenType + "--" + json1.ValueType);
- }
- #endregion
- #region 使用JArray、JObject、JToken進行讀取(常用)
- Console.WriteLine("\n9_2--使用JArray、JObject、JToken進行讀取:");
- string jsonStr9_2 = @"
- [{'Languages':['C#','Java'],'Name':'李志偉','Sex':true},
- {'Languages':['C#','C++'],'Name':'Coder2','Sex':false},
- {'Languages':['C#','C++','C','Java'],'Name':'Coder3','Sex':true}]";
- var Jobj = JArray.Parse(jsonStr9_2);
- string mystr1 = Jobj.ToString();
- Console.WriteLine("this json:\n" + mystr1);
- JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr9_2);
- foreach (JToken jt in ja)
- {
- JObject jo = (JObject)jt;
- JArray temp = (JArray)jo["Languages"];
- foreach (JToken token in temp)
- {
- Console.Write(token + " ");
- }
- Console.WriteLine("\t" + jo["Name"] + "\t" + jo["Sex"]);
- }
- #endregion
- #region Json時間字符串的處理
- Console.WriteLine("\nJson9_3--時間字符串的處理:");
- DateTime time = DateTime.Now;
- //這裏使用自定義日期格式
- IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();
- timeConverter.DateTimeFormat = "北京時間:yyyy-MM-dd HH:mm:ss";
- //序列化時間
- string JsonStr = JsonConvert.SerializeObject(time, timeConverter);
- Console.WriteLine(JsonStr);
- //反序列化時間
- DateTime time2 = JsonConvert.DeserializeObject<DateTime>(JsonStr, timeConverter);
- Console.WriteLine(time2);
- Console.WriteLine("\n\n");
- #endregion
- #endregion
- }
- }
- }