如何访问JArray的元素

我有以下Json从Twitter获得

+ token {[ { "trends": [ { "name": "Croke Park II", "url": "http://twitter.com/search?q=%22Croke+Park+II%22", "promoted_content": null, "query": "%22Croke+Park+II%22", "events": null }, { "name": "#twiznight", "url": "http://twitter.com/search?q=%23twiznight", "promoted_content": null, "query": "%23twiznight", "events": null }, { "name": "#Phanhattan", "url": "http://twitter.com/search?q=%23Phanhattan", "promoted_content": null, "query": "%23Phanhattan", "events": null }, { "name": "#VinB", "url": "http://twitter.com/search?q=%23VinB", "promoted_content": null, "query": "%23VinB", "events": null }, { "name": "#Boston", "url": "http://twitter.com/search?q=%23Boston", "promoted_content": null, "query": "%23Boston", "events": null }, { "name": "#rtept", "url": "http://twitter.com/search?q=%23rtept", "promoted_content": null, "query": "%23rtept", "events": null }, { "name": "Facebook", "url": "http://twitter.com/search?q=Facebook", "promoted_content": null, "query": "Facebook", "events": null }, { "name": "Ireland", "url": "http://twitter.com/search?q=Ireland", "promoted_content": null, "query": "Ireland", "events": null }, { "name": "Everton", "url": "http://twitter.com/search?q=Everton", "promoted_content": null, "query": "Everton", "events": null }, { "name": "Twitter", "url": "http://twitter.com/search?q=Twitter", "promoted_content": null, "query": "Twitter", "events": null } ], "as_of": "2013-04-17T13:05:30Z", "created_at": "2013-04-17T12:51:41Z", "locations": [ { "name": "Dublin", "woeid": 560743 } ] } ]} Newtonsoft.Json.Linq.JToken {Newtonsoft.Json.Linq.JArray} 

问题是我似乎无法访问任何元素。 我已经尝试了foreach循环和正常的循环,并且似乎永远不会访问单个元素,它总是最终访问整个区域。

知道我如何访问这个Json JArray中的各个元素吗?

更新 – 我validation了以下工作。 也许你的JArray的创建并不完全正确。

 [TestMethod] public void TestJson() { var jsonString = @"{""trends"": [ { ""name"": ""Croke Park II"", ""url"": ""http://twitter.com/search?q=%22Croke+Park+II%22"", ""promoted_content"": null, ""query"": ""%22Croke+Park+II%22"", ""events"": null }, { ""name"": ""Siptu"", ""url"": ""http://twitter.com/search?q=Siptu"", ""promoted_content"": null, ""query"": ""Siptu"", ""events"": null }, { ""name"": ""#HNCJ"", ""url"": ""http://twitter.com/search?q=%23HNCJ"", ""promoted_content"": null, ""query"": ""%23HNCJ"", ""events"": null }, { ""name"": ""Boston"", ""url"": ""http://twitter.com/search?q=Boston"", ""promoted_content"": null, ""query"": ""Boston"", ""events"": null }, { ""name"": ""#prayforboston"", ""url"": ""http://twitter.com/search?q=%23prayforboston"", ""promoted_content"": null, ""query"": ""%23prayforboston"", ""events"": null }, { ""name"": ""#TheMrsCarterShow"", ""url"": ""http://twitter.com/search?q=%23TheMrsCarterShow"", ""promoted_content"": null, ""query"": ""%23TheMrsCarterShow"", ""events"": null }, { ""name"": ""#Raw"", ""url"": ""http://twitter.com/search?q=%23Raw"", ""promoted_content"": null, ""query"": ""%23Raw"", ""events"": null }, { ""name"": ""Iran"", ""url"": ""http://twitter.com/search?q=Iran"", ""promoted_content"": null, ""query"": ""Iran"", ""events"": null }, { ""name"": ""#gaa"", ""url"": ""http://twitter.com/search?q=%23gaa"", ""promoted_content"": null, ""query"": ""gaa"", ""events"": null }, { ""name"": ""Facebook"", ""url"": ""http://twitter.com/search?q=Facebook"", ""promoted_content"": null, ""query"": ""Facebook"", ""events"": null }]}"; var twitterObject = JToken.Parse(jsonString); var trendsArray = twitterObject.Children().FirstOrDefault(x => x.Name == "trends").Value; foreach (var item in trendsArray.Children()) { var itemProperties = item.Children(); //you could do a foreach or a linq here depending on what you need to do exactly with the value var myElement = itemProperties.FirstOrDefault(x => x.Name == "url"); var myElementValue = myElement.Value; ////This is a JValue type } } 

因此,在JArray上调用Children来获取JArray中的每个JObject。 在每个JObject上调用Children来访问对象属性。

 foreach(var item in yourJArray.Children()) { var itemProperties = item.Children(); //you could do a foreach or a linq here depending on what you need to do exactly with the value var myElement = itemProperties.FirstOrDefault(x => x.Name == "url"); var myElementValue = myElement.Value; ////This is a JValue type } 

实际上将JArray项目视为JObject对我来说很好。
这是一个例子:
假设我们有这样的JSON对象数组:

 JArray jArray = JArray.parse(@"[ { ""name"": ""Croke Park II"", ""url"": ""http://twitter.com/search?q=%22Croke+Park+II%22"", ""promoted_content"": null, ""query"": ""%22Croke+Park+II%22"", ""events"": null }, { ""name"": ""Siptu"", ""url"": ""http://twitter.com/search?q=Siptu"", ""promoted_content"": null, ""query"": ""Siptu"", ""events"": null }]"); 

要访问每个项目,我们只需执行以下操作:

 foreach (JObject item in jArray) { string name = item.GetValue("name"); string url = item.GetValue("url"); // ... } 

一旦你有了一个JArray就可以像对待任何其他Enumerable对象那样对待它,并且使用linq你可以访问它们,检查它们,validation它们并选择它们。

 var str = @"[1, 2, 3]"; var jArray = JArray.Parse(str); Console.WriteLine(String.Join("-", jArray.Where(i => (int)i > 1).Select(i => i.ToString())));