从 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中更新它

如何从python中的CSV文件中的列中选择一个随机值?

jQuery 从字符串数组中选择一个随机值

为啥从函数返回数组作为参数时,我会从函数中的数组中获取随机值? [复制]

标签从数据库c#中放置随机值

从数组中选择一个随机值