Json的動態解析


 最近在項目中需要動態解析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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM