基本上我有这个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; (不知道该怎么称呼它),我不明白在我的情况下如何使用它。
答案 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是一个对象,其属性包含数组。