2013-04-16 19 views
13

Mam następujący Json zdobyć z TwitteraJak uzyskać dostęp elementy JArray

 +  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} 

Problem jest nie wydaje się dostęp do wszystkich elementów. Próbowałem pętli foreach i normalnego dla pętli i nigdy nie uzyskuję dostępu do poszczególnych elemetów, co zawsze kończy się dostępem do całego obszaru.

Masz pomysł, jak uzyskać dostęp do poszczególnych elementów w tym Json JArray?

Odpowiedz

17

Aktualizacja - zweryfikowałem poniższe prace. Być może stworzenie twojego JArray nie jest całkiem poprawne.

[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<JProperty>().FirstOrDefault(x => x.Name == "trends").Value; 


     foreach (var item in trendsArray.Children()) 
     { 
      var itemProperties = item.Children<JProperty>(); 
      //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 
     } 
    } 

więc nazwać dzieci na JArray dostać każdy JObject w JArray. Dzwoń do dzieci w każdym JObject, aby uzyskać dostęp do właściwości obiektów.

foreach(var item in yourJArray.Children()) 
{ 
    var itemProperties = item.Children<JProperty>(); 
    //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 
} 
+0

Pomyśl Mam ogólne pojęcie co mówisz. Jednak jeśli uruchomię ten kod, otrzymam ostatecznie zerowe odniesienie do myElementValue. Alternatywnie jeśli robię pętlę foreach na myElement, struktura json pozostaje taka sama i nadal napotykam na wiele elementów. To tak, jakby sama tablica była zniekształcona, lub coś w tym stylu, ponieważ nie chce się jej powtarzać. –

+0

Zaktualizowałem na przykładzie. – cgotberg

+0

Zobacz moje zaktualizowane pytanie, pokazuje dokładnie, co otrzymuję, gdy analizuję odpowiedź jako JArray –

4

Gdy masz JArray można traktować go jak każdy inny przedmiot, przeliczalny przy użyciu LINQ i można z nich korzystać, sprawdzić je, sprawdzić je i je zaznaczyć.

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

Właściwie traktując elementy JArray jak JObject działa dobrze dla mnie.
Oto przykład:
Powiedzmy mamy taką tablicę obiektów 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 
       }]"); 

aby uzyskać dostęp do każdego elementu po prostu robimy co następuje:

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