2017-03-27 7 views
0

ich JSON.NET bin mit meiner JSON zu analysieren:Looping durch JObject C#

{ 
    "_links": { 
    "self": { 
     "href": "https://api-uat.dwolla.com/accounts/069b759d-6267-42d6-b30b-5d03ddd25673/funding-sources", 
     "type": "application/vnd.dwolla.v1.hal+json", 
     "resource-type": "funding-source" 
    } 
    }, 
    "_embedded": { 
    "funding-sources": [ 
     { 
     "_links": { 
      "self": { 
      "href": "https://api-uat.dwolla.com/funding-sources/0b2f6a31-b909-4c7d-a9f8-6253e5f791d0", 
      "type": "application/vnd.dwolla.v1.hal+json", 
      "resource-type": "funding-source" 
      }, 
      "account": { 
      "href": "https://api-uat.dwolla.com/accounts/069b759d-6267-42d6-b30b-5d03ddd25673", 
      "type": "application/vnd.dwolla.v1.hal+json", 
      "resource-type": "account" 
      }, 
      "balance": { 
      "href": "https://api-uat.dwolla.com/funding-sources/0b2f6a31-b909-4c7d-a9f8-6253e5f791d0/balance", 
      "type": "application/vnd.dwolla.v1.hal+json", 
      "resource-type": "balance" 
      } 
     }, 
     "id": "0b2f6a31-b909-4c7d-a9f8-6253e5f791d0", 
     "status": "verified", 
     "type": "bank", 
     "name": "Bank Of America", 
     "created": "2017-03-22T12:54:51.000Z", 
     "removed": false, 
     "channels": [ 
      "ach" 
     ], 
     "bankName": "SANDBOX TEST BANK" 
     }, 
     { 
     "_links": { 
      "self": { 
      "href": "https://api-uat.dwolla.com/funding-sources/2235c3f5-03d6-4b7c-8ffb-c389c94375eb", 
      "type": "application/vnd.dwolla.v1.hal+json", 
      "resource-type": "funding-source" 
      }, 
      "account": { 
      "href": "https://api-uat.dwolla.com/accounts/069b759d-6267-42d6-b30b-5d03ddd25673", 
      "type": "application/vnd.dwolla.v1.hal+json", 
      "resource-type": "account" 
      } 
     }, 
     "id": "2235c3f5-03d6-4b7c-8ffb-c389c94375eb", 
     "status": "verified", 
     "type": "bank", 
     "name": "Superhero Savings Bank", 
     "created": "2017-03-17T06:39:28.000Z", 
     "removed": true, 
     "channels": [ 
      "ach" 
     ], 
     "bankName": "SANDBOX TEST BANK" 
     }  
    ] 
    } 
} 

Hier könnte ich N Anzahl der Finanzierungsquellen:

JObject jsonObject = JObject.Parse(myJson); 

Meine JSON etwa wie folgt aussieht. Ich möchte die href von self, wo entfernt wird, ist false für jede Finanzierung Quellen. Also im obigen Beispiel brauche ich:

href:"https://api-uat.dwolla.com/funding-sources/0b2f6a31-b909-4c7d-a9f8-6253e5f791d0".

Ich habe versucht, dies durch die JObject durch Schleifen zu erreichen:

foreach (var x in jsonObject) 
{ 
    if(x.Key == "_embedded") 
    { 
     foreach (var fundingSources in x.Value["funding-sources"]) 
     { 
      foreach (var y in fundingSources) 
      { 

      } 
     } 
    } 
} 

Leider konnte ich nicht die Finanzierungsquellen in ein Array erhalten.

Antwort

1

wie diese versuchen:

JObject jsonObject = JObject.Parse(myJson); 
foreach (JToken fundingSource in jsonObject.SelectToken("_embedded.funding-sources")) 
{ 
    bool removed = (bool)fundingSource["removed"]; 
    if (!removed) 
    { 
     string href = (string)fundingSource.SelectToken("_links.self.href"); 
     Console.WriteLine(href); 
    } 
} 

Fiddle: https://dotnetfiddle.net/Jhw8w6

Alternativ können Sie LINQ wie folgt verwenden:

JObject jsonObject = JObject.Parse(myJson); 
List<string> links = jsonObject.SelectToken("_embedded.funding-sources") 
    .Where(fundingSource => !(bool)fundingSource["removed"]) 
    .Select(fundingSource => (string)fundingSource.SelectToken("_links.self.href")) 
    .ToList(); 

Console.WriteLine(string.Join(Environment.NewLine, links)); 

Fiddle: https://dotnetfiddle.net/gnyGgk

+0

Das funktioniert wie ein Charme :) Geschätzt Brian! –

+0

Ich bin froh, dass ich helfen konnte. –

1

diesen Codeblock Versuchen:

JObject jsonObject = JObject.Parse (myJson); 

foreach (var x in jsonObject) 
{ 
    if (x.Key == "_embedded") 
    { 
     foreach (var source in x.Value [ "funding-sources" ]) 
     { 
      var removedAttribute = source [ "removed" ]; 
      if (removedAttribute != null && bool.Parse (removedAttribute.ToString()) == false) 
      { 
       var links = source [ "_links" ]; 
       var self = links [ "self" ]; 
       var href = self [ "href" ]; 
      } 
     } 
    } 
}