c#从JSon对象中的数组中获取索引

时间:2017-04-24 00:21:45

标签: c# arrays json json.net

我试图找出JObject对象中数组中字符串的索引。例如,您可以给出frc610并返回0.

// Get rankings JSON file from thebluealliance.com 
        string TBArankings = @"https://www.thebluealliance.com/api/v2/district/ont/2017/rankings?X-TBA-App-Id=frc2706:ONT-ranking-system:v01";
        var rankings = new WebClient().DownloadString(TBArankings);

        string usableTeamNumber = "frc" + teamNumberString;
        string team_key = "";
        int rank = 0;

        dynamic arr = JsonConvert.DeserializeObject(rankings);
        foreach (dynamic obj in arr)
        {
            team_key = obj.team_key;
            rank = obj.rank;
        }

        int index = Array.IndexOf(arr, (string)usableTeamNumber);  // <-- This is where the exception is thrown.

        Console.WriteLine(index);

        // Wait 20 seconds
        System.Threading.Thread.Sleep(20000);

Here's the json file I'm using

我尝试过多种不同的解决方案,但都没有。

2 个答案:

答案 0 :(得分:1)

您可以将索引保留在变量中。

    string usableTeamNumber = $"frc{teamNumberString}";
    string team_key = "";
    int rank = 0;
    int index = 0;
    int count = 0;

    dynamic arr = JsonConvert.DeserializeObject(rankings);
    foreach (dynamic obj in arr)
    {
        team_key = obj.team_key;
        rank = obj.rank;

        if (usableTeamNumber.Equals(team_key) {
             index = count;
        }

        count++;
    }

    Console.WriteLine(index);

答案 1 :(得分:1)

创建一个模仿数据结构的类,例如(只有3个根域):

public class EventPoints
{
    public int point_total { get; set; }
    public int rank { get; set; }
    public string team_key { get; set; }
}

然后,您可以将对象反序列化为这些对象的列表,并且可以使用LINQ或其他工具来查询该列表:

        string teamNumberString = "frc2056";
        string TBArankings = @"https://www.thebluealliance.com/api/v2/district/ont/2017/rankings?X-TBA-App-Id=frc2706:ONT-ranking-system:v01";
        var rankings = new WebClient().DownloadString(TBArankings);

        List<EventPoints> eps = JsonConvert.DeserializeObject<List<EventPoints>>(rankings);

        EventPoints sp = eps.Where(x => x.team_key.Equals(teamNumberString)).FirstOrDefault();

        Console.WriteLine(eps.IndexOf(sp));

        Console.ReadLine();