c# - 如何在 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;
}
解决方案
你可以这样做
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
}
}
推荐阅读
- mysql - Reactjs - 日期类型字段不更新 DATE 类型的 MYSQL 日期列
- c - 我错过了哪个测试用例?
- postgresql - 使用带有 postgresql 的 docker 卷来验证它是否保存在主机文件系统上
- javascript - 执行代理请求时出现“无法建立隧道套接字”错误
- highcharts - Highchart去除小数位
- spring - 错误通道在拆分器/聚合器中不起作用(异步调用)
- python - 当相同的 POST 在 Postman 中正常工作时,如何解决 Python 请求 POST 失败?
- java - 我的应用程序不检查 location.addOnCompleteListener() 并崩溃
- node.js - 如何从模块中获取日期到 index.js
- python - 设置感知器的阈值