根据其中一个值获取JSON对象

时间:2017-04-21 17:02:20

标签: c# json object json.net

基本上我有这个JSON,我必须得到" Id"基于" Userid"

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

我需要根据" Userid"。

选择JSON对象

我该怎么做?

我使用了这个帖子:Json.Net Select Object based on a value

那里的解决方案是:

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);
    }
}

但是因为我没有&#34; wvw_matches&#34; (不知道该怎么称呼它),我不明白在我的情况下如何使用它。

3 个答案:

答案 0 :(得分:0)

假设您没有大量记录,请创建一个类来保存JSON所代表的对象。

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);
    }
}

然后只需使用linq表达式来查询数组。

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

答案 1 :(得分:0)

这就是你可以做到的。

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();
}

您需要将JSON响应映射到类。因为你有一个数组,你需要

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

希望它适合你。

答案 2 :(得分:0)

由于我编写了您所引用的示例,因此在此更新以使用您的JSON。

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);
    }
}       

小提琴:https://dotnetfiddle.net/vpZpSS

不同之处在于您的JSON 数组,而原始示例中的JSON是一个对象,其属性包含数组。