2017-04-21 1 views
0

Im Prinzip habe ich dieses JSON und ich muss die „Id“ erhalten auf der Grundlage der „Benutzer-ID“Holen Sie sich ein JSON-Objekt basierend auf einer seiner Werte

[ 
    { 
    "Userid": 2, 
    "Id": 99999 
    }, 
    { 
    "Userid": 4, 
    "Id": 55555 
    } 
] 

Ich brauche das JSON-Objekt auf der Basis auswählen "Benutzeridentifikation".

Wie würde ich das tun?

ich diesen Thread verwendet: Json.Net Select Object based on a value

Die Lösung war:

string json = @" 
{ 
    wvw_matches: [ 
     { 
      wvw_match_id: ""1-4"", 
      red_world_id: 1011, 
      blue_world_id: 1003, 
      green_world_id: 1002, 
      start_time: ""2013-09-14T01:00:00Z"", 
      end_time: ""2013-09-21T01:00:00Z"" 
     }, 
     { 
      wvw_match_id: ""1-2"", 
      red_world_id: 1017, 
      blue_world_id: 1021, 
      green_world_id: 1009, 
      start_time: ""2013-09-14T01:00:00Z"", 
      end_time: ""2013-09-21T01:00:00Z"" 
     } 
    ] 
}"; 

string matchIdToFind = "1-2"; 
JObject jo = JObject.Parse(json); 

JObject match = jo["wvw_matches"].Values<JObject>() 
    .Where(m => m["wvw_match_id"].Value<string>() == matchIdToFind) 
    .FirstOrDefault(); 

if (match != null) 
{ 
    foreach (JProperty prop in match.Properties()) 
    { 
     Console.WriteLine(prop.Name + ": " + prop.Value); 
    } 
} 

Aber da mein kein "wvw_matches" hat (keine Ahnung, was es zu nennen), das tue ich nicht verstehe, wie ich es in meiner Situation anwenden würde.

+1

'jo.Values ​​() .Where (. M => m [ "Userid"] Wert () == matchIdToFind) .FirstOrDefault();'? – GSerg

+0

'var str = Datei.ReadAllText (" E: /User.json "); Zeichenfolge json = $ "{str}"; JObject jo = JObject.Parse (json); Zeichenfolge matchIdToFind = "1"; JObject match = jo.Values ​​() .Wobei (m => m ["Benutzer-ID"]. Wert () == matchIdToFind) .FirstOrDefault(); if (Spiel! = Null) { foreach (JProperty prop in match.Properties()) { Console.WriteLine (prop.Name + ":" + prop.Value); } } 'dies wirft den Fehler: – datuhaccz

+1

' string json = $ "{str}"; '? Welche Schritte haben Sie unternommen, um herauszufinden, was 'File.ReadAllText()' zurückgibt? –

Antwort

0

So können Sie es tun.

public class Sample 
{ 
    public string Userid { get; set; } 
    public string Id { get; set; } 
} 


public static void Main(string[] args) 
{ 
     using (var stream = new StreamReader("sample.json")) 
     { 

      var sampleArray = JsonConvert.DeserializeObject<Sample[]>(stream.ReadToEnd()); 

      foreach (var users in sampleArray) 
      { 
       Console.WriteLine("Userid: {0}", users.Userid); 
       Console.WriteLine("Id: {0}", users.Id); 
      } 
     } 

     Console.Read(); 
} 

Sie müssen Ihre JSON-Antwort einer Klasse zuordnen. Und wie Sie ein Array haben müssen Sie

var sampleArray = JsonConvert.DeserializeObject<Sample[]>(stream.ReadToEnd());

Hoffe, dass es für Sie arbeitet.

0

Angenommen, Sie haben nicht viele Datensätze, erstellen Sie eine Klasse für das Objekt, das der JSON darstellt.

public class JsonData //name this something relevant to your data. 
{ 
    public int Userid { get; set; } 
    public int Id { get; set; } 

    public static JsonData[] Deserialize(string jsonString) 
    { 
     return JsonConvert.DeserializeObject<JsonData[]>(jsonString); 
    } 
} 

Verwenden Sie dann einen linq-Ausdruck, um das Array abzufragen.

jsonArray.Where(j => j.Userid == <your value>).Select(j => j.Id); 
0

Da ich das Beispiel geschrieben habe, auf das Sie verweisen, wird es hier aktualisiert, um stattdessen Ihren JSON zu verwenden.

string json = @" 
[ 
    { 
    ""Userid"": 2, 
    ""Id"": 99999 
    }, 
    { 
    ""Userid"": 4, 
    ""Id"": 55555 
    } 
]"; 

string userIdToFind = "4"; 

JArray ja = JArray.Parse(json); 

JObject match = ja.Children<JObject>() 
    .FirstOrDefault(m => m["Userid"].Value<string>() == userIdToFind); 

if (match != null) 
{ 
    foreach (JProperty prop in match.Properties()) 
    { 
     Console.WriteLine(prop.Name + ": " + prop.Value); 
    } 
}  

Fiddle: https://dotnetfiddle.net/vpZpSS

Der Unterschied ist, dass Ihr JSON ist ein Array, während die JSON im ursprünglichen Beispiel ein Objekt mit einer Eigenschaft war enthält ein Array.

Verwandte Themen