从 JSON 中的多个返回中随机选择一个值
Posted
技术标签:
【中文标题】从 JSON 中的多个返回中随机选择一个值【英文标题】:Randomly picking a value from multiple returns in JSON 【发布时间】:2020-10-27 02:06:18 【问题描述】:这是我的代码,它适用于单个返回值,但是,如果结果是多个并且我想随机选择一个怎么办?
我的代码:
class CheckSummonerLevel
public class GetVariable
public string id get; set;
public string secondid get; set;
public static string Get(string url)
var client = new System.Net.WebClient();
string json= client.DownloadString(url);
var result = JsonConvert.DeserializeObject<GetVariable>(json);
string secondid = result.secondid;
return result.id;
这会返回一个值,但是,如果我的 JSON 是这样的呢:
"Values": [
"id": 123456
,
"id": 987654
,
"id": 654987
,
"id": 333222
],
"secondid": 88888
我想从“id”字段中随机选择一个值?
类似:
Random a = new Random();
int r = a.Next(1,4);
return result.ElementAt(r).id;
【问题讨论】:
【参考方案1】:你可以修改GetVariable
的结构来匹配Json,如下代码:
1 - 类结构:
public class GetVariable
public GetId[] Values get; set;
public string secondid get; set;
public class GetId
public int id get; set;
2 - Json 的反序列化并随机获取一个值:
GetVariable result = JsonConvert.DeserializeObject<GetVariable>(json);
GetId[] values = result.Values;
string secondId = result.secondid;
int r = new Random().Next(0, values.Length);
int res = values.ElementAt(r).id;
Console.WriteLine(res + " ", secondId);
希望对您有所帮助。
【讨论】:
您应该使用Values.Length
作为Next
调用的第二个参数,而不是将其硬编码为3
。
您应该使用Length
,而不是Length - 1
,因为Next
的maxValue 参数是ex包含的。
请不要这样做new Random().Next
。如果在循环中调用,这很容易导致重复值。您应该只为每个线程创建一个 Random
实例。
@Sajid - 是的,我可以看到。这就是为什么我说“如果”。最好是进行防御性编程并学习良好的习惯。
@Sajid - 因为new Random().Next(...)
。相信我,如果做得好,你会得到支持。以上是关于从 JSON 中的多个返回中随机选择一个值的主要内容,如果未能解决你的问题,请参考以下文章
从嵌套的dict中选择一个随机值,并在另一个嵌套的dict中更新它