Querying JSON with LINQ 解析獲取json 字符串中的內容,對於單級的可以,對於多級的時候建議使用下一種方式
//Querying with LINQ string json = @"{ school:{ name:'實驗高中', students:[ {name:'張三',age:18}, {name:'李四',age:19} ], sites:['濟南','聊城'] } }"; JObject o = JObject.Parse(json); string schname = (string)o["school"]["name"]; Console.WriteLine(schname); //實驗高中 string stuname = (string)o["school"]["students"][1]["name"]; Console.WriteLine(stuname);//李四 JArray sites = (JArray)o["school"]["sites"]; foreach (var item in sites) { Console.WriteLine(item); //濟南 //聊城 } IList<string> siteList = sites.Select(q => (string)q).ToList(); Console.WriteLine(sites.Count);//2
Querying JSON width SelectToken 使用SelectToken 方式獲取json 字符串中的內容(比較推薦的方式)
// Querying JSON with SelectToken string json = @"{ school:{ name:'實驗高中', students:[ {name:'張三',age:18}, {name:'李四',age:19} ], sites:['濟南','聊城'] } }"; JObject o = JObject.Parse(json); //SelectToken 方法使用 string schname = (string)o.SelectToken("school.name"); Console.WriteLine(schname); //實驗高中 string stuname = (string)o.SelectToken("school.students[1].name"); Console.WriteLine(stuname); //李四 //SelectToken with JSONPath JToken stu1 = o.SelectToken("$.school.students[?(@.name=='張三')]"); Console.WriteLine(stu1); //{"name": "張三","age": 18} Console.WriteLine(stu1["age"]); //18 IEnumerable<JToken> stus = o.SelectTokens("$..students[?(@.age>15)]"); foreach (var item in stus) { Console.WriteLine(item); //{"name": "張三", "age": 18 } //{ "name": "李四", "age": 19} } //SelectToken with LINQ // $...name 意思是從當前接口文檔的1,2,3級中查找name,並返回結果 IList<string> names = o.SelectTokens("$...name").Select(q => (string)q).ToList(); Console.WriteLine(string.Join(",",names)); //實驗高中,張三,李四
轉自:https://blog.csdn.net/qq_23018459/article/details/79801306