C# Newtonsoft.Json之LINQ To Json实例(二)

四、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)); //实验高中,张三,李四

Linq To JSON 一:http://blog.csdn.net/u011127019/article/details/52486867

更多简介;http://blog.csdn.net/u011127019/article/details/51706619

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值