首页 > 解决方案 > 如何在 C# 控制台应用程序的 Json 输出中从深处访问特定值

问题描述

我正在从体育统计 API 访问以下 Json 输出,并希望获取每场比赛的客队 ID 中的特定值。(日期>比赛>球队>客场>球队:id)。Json 在这里显示:https ://statsapi.web.nhl.com/api/v1/schedule

在我的项目的其余大部分时间里,我都成功地使用了 jObject.Parse(),但是这个价值被埋没了,我对如何扩展我的巢以达到它的知识有限。任何帮助将不胜感激。

到目前为止,我正在尝试这样,但收到错误消息指出我正在访问无效的键值。

     public List<string> GetAwayTeamsPlayingToday()
    {
        var URL = new UriBuilder("https://statsapi.web.nhl.com/api/v1/schedule");

        var client = new WebClient();

        List<string> awayTeamsPlayingToday = new List<string>();

        JObject ScheduleData = JObject.Parse(client.DownloadString(URL.ToString()));

        string lplayerAwayTeamId = string.Empty;

        var dates = ScheduleData["dates"] as JArray;
        foreach (JObject date in dates)
        {
            var games = dates["games"] as JArray;
            foreach (JObject game in games)
            {
                var teams = games["teams"] as JArray;
                foreach (JObject team in teams)
                {
                    var away = teams["away"] as JArray;
                    foreach (JObject tm in away)
                    {
                        var awayTeam = away["team"] as JObject;

                        lplayerAwayTeamId = awayTeam["id"].ToString();

                        awayTeamsPlayingToday.Add(lplayerAwayTeamId);
                    }
                }
            }
        }
        return awayTeamsPlayingToday;
    }

标签: c#jsonnested

解决方案


你可以这样做

var URL = new UriBuilder("https://statsapi.web.nhl.com/api/v1/schedule");

var client = new WebClient();

List<string> awayTeamsPlayingToday = new List<string>();

JObject ScheduleData = JObject.Parse(client.DownloadString(URL.ToString()));

var data = JsonConvert.DeserializeObject<dynamic>(ScheduleData.ToString());

//this sample is for first date, first game
var awayTeamId = data.dates[0].games[0].teams.away.team.id;

//to get each game
foreach (var date in data.dates)
{
    foreach (var game in date.games)
    {
        var id = game.teams.away.team.id;            
        //your logic
    }
}

推荐阅读