2017-02-28 2 views
0

Ich habe ein Stück Code, der einen Artikelnamen aus einem JSON nehmen sollte, dann vergleichen Sie es mit einer Preisliste. Wenn der Name dort ist, wird es den Preis finden und zu einer Listenansicht hinzufügen. Das Problem damit ist, wenn ich versuchte, dort eine foreach-Schleife hinzuzufügen, dann wirft es mir einen Fehler. Hier ist mein Code:Holen Sie sich jedes Element aus einer Liste und vergleichen Sie es mit einem anderen

JObject tokenJson2 = JObject.Parse(json2); 
foreach (var data2 in tokenJson2["response"]) 
{ 
    var item = data2.ToArray() 
        .SingleOrDefault(x => ((JProperty)x).Name == name.ToString()) as JProperty; 

    if (item != null) 
    { 
    //DoSomething 
    } 
} 

Hier wird der Fehler erhalte ich:

Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JProperty'.

Hier ist die tokenJson2 Daten: Link

+3

Vielleicht können Sie ein Beispiel Json String:

Es kann auf diese Weise wiederholt werden. –

+0

Können Sie mir vielleicht einen Vorschlag geben, wo Sie es hochladen können? –

+0

Der Inhalt von json2 wäre genug. Wenn es zu groß/lang ist, würde ein Beispieleintrag ausreichen und Sie könnten unter der Frage schreiben. –

Antwort

0

Nach Ihrer (Art ungewöhnlich) JSON Struktur "Antwort" ist ein JProperty mit Wert ist JObject, enthält mehrere JProperty Elemente mit dem Namen der JProperty.Name und Wert JObject mit "Preis" und "Menge" Eigenschaften.

var response = (JObject)tokenJson2.Property("response").Value; 
foreach (var item in response.Properties()) 
{ 
    var name = item.Name; 
    var data = (JObject)item.Value; 
}; 
0

Wenn Ihr json in diesem Stil ist

{"NameCol"="N1", "response" : [{"price":"22"}, {"price":24}, ..... {....}] 

Ich benutze die Newtonsoft-Bibliothek für diesen Zweck. Jeder data2 in Schleife wird einzelnes Objekt wie {"price":"22"}

foreach (var data2 in (Newtonsoft.Json.Linq.JArray)tokenJson2["response"]) 
{ 
     string name = ""; 
     if(tokenJson2.TryParseValue("NameCol", name)) 
     { 
     string NameFromJSON =""; 
     //This line will convert {"price":"22"} to dictionary 
     Dictionary<string, object> data2_dict = 
      JsonConvert.DeserializeObject<Dictionary<string, object>>(data2.ToString()); 
     if(data2_dict["name"] == name) 
     { 
      //DO SOME THING HERE 
     } 
     }   
} 
+0

Für mich hat es gesagt, dass es Probleme hat, es Wörterbuch zu konvertieren –

+0

Sie können es zu relevantem Objekt konvertieren, das übereinstimmende Eigenschaften hat. – Lali

+0

Sorry, aber ich bin mir nicht sicher, was du meinst? Hier ist jedoch der vollständige Fehler: Fehler beim Konvertieren des Werts "AK-47 | Aquamarine Revenge (Battle-Scarred)", um 'System.Collections.Generic.Dictionary'2 [System.String, System.Object]' einzugeben. Pfad '', Zeile 1, Position 45. –

0

enthalten u SelectTokens verwenden können ..

 JToken[] tokens = tokenJson2.SelectTokens(string.Format("response.{0}", name)).ToArray(); 
     Array.ForEach<JToken>(tokens, (token) => { 
      //DoSomething 
     }); 
+0

Hey hmm ich kann nicht Ihren Code arbeiten? Hier ist der Fehler: Zusätzliche Informationen: Unerwartetes Zeichen beim Analysieren des Pfades: –

+0

Ich kann Ihren json Link nicht öffnen. Kannst du hier setzen? – levent

+0

https://api.opskins.com/IPricing/GetAllLowestListPrices/v1/?appid=730 –

Verwandte Themen