2017-09-28 1 views
-2

Meine Frage ist klar. Ich möchte bestimmte Elemente (nur Wert von Name 'Name') in diesem JSON-Array erhalten;C# Erhalte alle Childs eines Arrays mit dem angegebenen Namen

https://i.hizliresim.com/o6Z0Wb.png < Beispiel ('Ergebnis' Abschnitt sollte im vorherigen Kreis sein.);

{"success":true,"message":"","result":[ 
{"name":"VALUE_I_WANT_TO_GET1","Created":"2017-06-06T01:22:35.727"}, 
{"name":"VALUE_I_WANT_TO_GET2","Created":"2017-06-06T01:22:35.727"}, 
{"name":"VALUE_I_WANT_TO_GET3","Created":"2017-06-06T01:22:35.727"}, 
{"name":"VALUE_I_WANT_TO_GET4","Created":"2017-06-06T01:22:35.727"} 
]} 

Wie Sie sehen können ... ist dies eine klare Frage. und mein Code ist (ich denke, es sollte so etwas sein);

 var json = wc.DownloadString("website/url"); 
     JObject data = JObject.Parse(json); 
     var test = (string)data["result"][/*I want to get all values with name 'name'*/]["name"]; 

Ich habe es mit diesem Code können Sie es verwenden :)

 JObject data = JObject.Parse(json); 

     for (int i = 0; i <= data["result"].Count()-1; i++) 
     { 
      var test = (string)data["result"][i]["name"]; 
      listBox1.Items.Add(test); 
     } 
+1

Bitte zeigen Sie Beispiel json .. –

+0

Ich bearbeitet Frage – Radagast

+0

Welchen Typ ist 'json_array' und welchen Rahmen verwenden Sie für die Deserialisierung? –

Antwort

0

Hier einige Code:

void Main() 
{ 
    // create array 
    DataFromJSON[] data = new UserQuery.DataFromJSON[3]; 
    data[0] = new DataFromJSON() { Data = "val0", Created = DateTime.Now }; 
    data[1] = new DataFromJSON() { Data = "val1", Created = DateTime.Now }; 
    data[2] = new DataFromJSON() { Data = "val2", Created = DateTime.Now }; 

    var values = from x in data 
       select x.Data; 

    values.Dump(); 

} 

// Define other methods and classes here 
public class DataFromJSON 
{ 
    public string Data { get; set; } 
    public DateTime Created { get; set;} 
} 

Hier # sa Bild der Ergebnisse mit LinqPad . Die Zeile values.Dump() ruft eine von LinqPad definierte Erweiterungsmethode auf, um das Objekt, an das sie angehängt ist, im Fenster 'Ergebnisse' unter dem Code Windor auszugeben.

LinqPad5 resuts

+0

Entschuldigung, aber mein Code ist; var json = wc.DownloadString ("https: // site/JSON_DATA"); JObject Daten = JObject.Parse (JSON); var test = (Zeichenfolge) Daten ["Ergebnis"] [0-226] ["NAME_TO_GET_VALUE"] textBox7.Text = test; – Radagast

0

Zuerst müssen Sie Ihre json in Ihre Art deserialisieren:

MyType results = JsonConvert.DeserializeObject<MyType>(json_array); 

wo MyType ist so etwas wie dieses:

class MyType 
{ 
    public bool success { get; set; } 
    public string message { get; set; } 
    public List<AnotherType> results { get; set; } 
} 

und

class AnotherType 
{ 
    public string data { get; set; } 
    public DateTime Created { get; set; } 
} 

nun die ersten 227 Elemente von ihm erhalten und wählen Sie die data:

var data = myInstance.results.Take(227).Select(x => x.data); 
+0

NEIN, ich möchte 227 Kinder mit einem SPEZIFISCHEN NAMEN wie: deserialized_Json ["results"] [0-227] ["SPECİFİED_NAME_FOR_GET_VALUES"]; – Radagast

0

Es ist ein netter Visual Studio Trick für Sie tun kann. Kopieren Sie zunächst ein Beispiel für das JSON, das Sie abfragen möchten, Öffnen Sie eine neue C# -Datei, und wählen Sie Edit ->Paste Special ->Paste JSON as classes.
BOOM! Hier sind die Klassen, die Sie brauchen, Sie sollten ihnen nur aussagekräftige Namen geben.

Als nächstes können Sie die Json wie so desiralize:

var myInstance = JsonConvert.DeserializeJson<MyClass>(jsonString); 

Das gibt Ihnen eine Instanz des Stammobjekts, wobei die Daten in einem Array in ihm gespeichert.

EDIT:

die Werte auszuwählen, Sie so etwas wie dies tun können (nachdem Sie die Daten in der Zeile oberhalb deserialisieren):

myInstance.Array.Select(x => x.name).ToList(); 

, die eine Liste mit den Saiten nur geben würde, in Der Name ist Eigentum aller deiner Besitztümer.

+0

Bitte schauen Sie sich das zur Frage hinzugefügte Bild an. – Radagast

+0

@Radagast - Etwas ist mir nicht klar, sind alle Instanzen in den Daten des gleichen Typs? Oder enthält das Array mehrere Typen? Das heißt, suchen Sie nach allen Werten der Eigenschaft 'name' oder nach allen Instanzen im Array, suchen Sie nach denen, die * die Eigenschaft' name' enthalten (und die anderen keine solche Eigenschaft enthalten) . – CKII

+0

lesen Sie diese Antwort bitte: https://stackoverflow.com/questions/46468642/c-sharp-get-all-childs-of-a-array-with-specified-name/46469888#46469888 – Radagast

Verwandte Themen