最近在項目中需要動態解析json,但解析json的方式有很多,如何合理的解析就是我們需要考慮的問題?比如Newtonsoft.Json.Linq下提供的JToken、JObject等,Newtonsoft.Json下提供的JsonConvert。 我們今天主要介紹不同解析方式適用的場景以及用法: 1 ...
最近在項目中需要動態解析json,但解析json的方式有很多,如何合理的解析就是我們需要考慮的問題?比如Newtonsoft.Json.Linq下提供的JToken、JObject等,Newtonsoft.Json下提供的JsonConvert。
JObject | 用於操作json對象 |
JArray | 用於操作json數組 |
JValue | 表示數組的值 |
JProperty | 表示對象中的屬性,以"key/value"的形式 |
JToken | 用於存放Linq to Json查詢後的結果 |
我們今天主要介紹不同解析方式適用的場景以及用法:
1、JObject
JObject用於操作對象,若用它來解析其它類型的json會報Newtonsoft.Json.JsonReaderException。
JObject jObject = new JObject(); jObject.Add(new JProperty("name", "caixukun")); jObject.Add(new JProperty("skill", new JObject(new JProperty("id", 1), new JProperty("name", "撩妹")))); Console.WriteLine(jObject.ToString());
結果:
{
"name": "caixukun",
"skill": {
"id": 1,
"name": "撩妹"
}
}
2、JArray
JArray用於操作數組,若用它來解析其它類型的json會報Newtonsoft.Json.JsonReaderException。
JArray arr = new JArray(); arr.Add(new JValue(1)); arr.Add(new JValue(2)); arr.Add(new JValue(3)); Console.WriteLine(arr.ToString());
結果:
[
1,
2,
3
]
3、JToken
string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }"; // 獲取員工名稱 JObject jObject = JObject.Parse(json); var name = jObject.Value<string>("Name"); Console.WriteLine(name); // 獲取員工年齡 JToken jToken = jObject.SelectToken("Age"); Console.WriteLine(jToken.ToString()); // 獲取同事信息 JToken jToken1 = jObject["Colleagues"]; Console.WriteLine(jToken1.ToString()); Console.WriteLine("============================="); // 獲取員工同事的所有姓名 var names = from staff in jToken1.Children() select (string)staff["Name"]; // var names = jObject.SelectToken("Colleagues").Select(p => p["Name"]).ToList(); foreach (var item in names) { Console.WriteLine(item); } Console.WriteLine("============================="); // 修改Jack的年齡 jObject["Age"] = 99; Console.WriteLine(jObject.ToString()); // 修改同事Tome的年齡 jToken1[0]["Age"] = 45; Console.WriteLine(jObject.ToString()); Console.WriteLine("============================="); // Abel離職了 jObject["Colleagues"][1].Remove(); Console.WriteLine(jObject.ToString()); // 移除Jack的同事 jObject.Remove("Colleagues"); Console.WriteLine(jObject.ToString()); Console.WriteLine("============================="); // Jack缺少部門信息 jObject["Age"].Parent.AddAfterSelf(new JProperty("Department", "總裁辦")); // 來了一個新員工Jerry JObject linda = new JObject(new JProperty("Name", "Linda"), new JProperty("Age", "23")); jObject.Add(new JProperty("Colleagues", new JArray() { linda })); Console.WriteLine(jObject.ToString());
參考:https://www.cnblogs.com/klsw/p/5904573.html