当前位置: 首页 > 编程语言 > C#

在JObject层次结构中按名称搜索特定的JTokenshare

时间:2023-04-10 17:50:56 C#

在JObject层次结构中按名称搜索特定的JToken我有一些来自服务器的Json响应,例如:bounds":{"northeast":{"lat":50.4639653,"lng":30.6325177},"southwest":{"lat":50.4599625,"lng":30.6272425}},"copyrights":"Mapdata?2013谷歌”,“腿”:[{“距离”:{“文本”:“1.7公里”,“价值”:1729},“持续时间”:{“文本”:“4分钟”,“价值”:223},我想从"legs"中获取token'text'的值:[{"distance":{"text":"1.7km","value":1729},这是一个值为"1.7km"的字符串.问题:NewtonsoftJsonlib中是否有这样的内置函数:publicstring(orJToken)GetJtokenByName(JObjectdocument,stringjtokenName)或者我是否需要实现一些递归方法,通过名称搜索对JObject中的所有JTokens和JArray进行排序捷币?如果您正在寻找一个非常具体的令牌并知道它的路径,您可以使用内置的SelectToken()方法轻松导航到它。例如:stringdistance=jObject.SelectToken("routes[0].legs[0].distance.text").ToString();如果您需要在JSON中查找具有给定名称的标记的所有出现,而不考虑它们的出现,那么是的,您需要一个递归方法。这是一个可能做到这一点的技巧:publicstaticclassJsonExtensions{publicstaticListFindTokens(thisJTokencontainerToken,stringname){FindTokens(containerToken,name,matches);返回火柴;}privatestaticvoidFindTokens(JTokencontainerToken,stringname,Listmatches){if(containerToken.Type==JTokenType.Object){foreach(JPropertychildincontainerToken.Children()){if(child.Name==name){matches.Add(child.Value);}FindTokens(child.Value,name,matches);}}elseif(containerToken.Type==JTokenType.Array){foreach(JTokenchildincontainerToken.Children()){FindTokens(child,name,matches);}}}}这是一个演示:classProgram{staticvoidMain(string[]args){stringjson=@"{""routes"":[{""bounds"":{""northeast"":{""lat"":50.4639653,""lng"":30.6325177},""southwest"":{""lat"":50.4599625,""lng"":30.6272425}},""legs":[{""distance"":{""text"":""1.7km"",""value"":1729},""duration"":{""text"":""4mins"",""value"":223}},{""distance"":{""text"":""2.3km"",""value"":2301},""duration"":{""text"":""5mins",""value"":305}}]}]}";JObjectjo=JObject.Parse(json);foreach(JTokentokeninjo.FindTokens("text")){Console.WriteLine(token.Path+":"+token.ToString());}}}这是输出:routes[0]。legs[0].distance.text:1.7kmroutes[0].legs[0].duration.text:4分钟routes[0].legs[1].distance.text:2.3kmroutes[0].legs[1].duration.text:5分钟在SelectTokens上使用javascript路径和SelectTokens方法非常简单这种方法很棒,支持这样的通配符:jObject.SelectTokens("routes[*].legs[*].*.text")查看示例代码:privateclassProgram{publicstaticvoidMain(string[]args){字符串json=GetJson();JObjectjObject=JObject.Parse(json);foreach(JTokentokeninjObject.SelectTokens("routes[*].legs[*].*.text")){Console.WriteLine(token.Path+":"+token);}}privatestaticstringGetJson(){return@"{""routes"":[{""bounds"":{""northeast"":{""lat"":50.4639653,""lng"":30.6325177},""southwest"":{""lat"":50.4599625,""lng"":30.6272425}},""legs"":[{""distance"":{""text"":""1.7km"",""value"":1729},""duration"":{""text"":""4mins"",""value"":223}},{""distance"":{""text"":""2.3km"",""value"":2301},""duration"":{""text"":""5mins"",""value"":305}}]}]}";}}这是输出:以上是C#学习教程:按名称搜索JObject层级,获取特定JToken分享的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家付费更多关注—routes[0].legs[0].distance.text:1.7kmroutes[0].legs[0].duration.text:4minsroutes[0].legs[1].distance.text:2.3kmroutes[0].legs[1].duration.text:5mins联系管理员删除。如需转载请注明出处: