![](/img/trans.png)
[英]Error Cannot access child value on Newtonsoft.Json.Linq.JProperty while reading JSON
[英]C# Cannot access child value on Newtonsoft.Json.Linq.JProperty
我希望你們能夠幫助我。 我想提取JSON文件中的每個ID,但是出現以下異常錯誤:
無法在Newtonsoft.Json.Linq.JProperty上訪問子值。
private void button1_Click(object sender, EventArgs e)
{
string address = "https://api.mysportsfeeds.com/v1.1/pull/nba/2016-2017-regular/cumulative_player_stats.json?team=85";
var w = new WebClient();
w.UseDefaultCredentials = true;
w.Credentials = new NetworkCredential("****", "****");
var result = w.DownloadString(address);
var obj = JObject.Parse(result);
var play = "";
foreach (JProperty child in obj["cumulativeplayerstats"])
{
play = child["player"]["ID"].ToString();
string latlong = Convert.ToString(play);
Console.WriteLine("player=" + Convert.ToString(play));
Console.ReadKey();
}
}
這是json的摘要:
{
"cumulativeplayerstats": {
"lastUpdatedOn": "2017-09-11 4:45:30 PM",
"playerstatsentry": [
{
"player": {
"ID": "10138",
"LastName": "Abrines",
"FirstName": "Alex",
"JerseyNumber": "8",
"Position": "F"
},
"team": {
"ID": "96",
"City": "Oklahoma City",
"Name": "Thunder",
"Abbreviation": "OKL"
},
"stats": {
"GamesPlayed": {
"@abbreviation": "GP",
"#text": "68"
},
"Fg2PtAtt": {
"@category": "Field Goals",
"@abbreviation": "2PA",
"#text": "94"
},
"Fg2PtMade": {
"@category": "Field Goals",
"@abbreviation": "2PM",
"#text": "40"
},
"Fg3PtAtt": {
"@category": "Field Goals",
"@abbreviation": "3PA",
"#text": "247"
},
"Fg3PtMade": {
"@category": "Field Goals",
"@abbreviation": "3PM",
"#text": "94"
},
"FtAtt": {
"@category": "Free Throws",
"@abbreviation": "FTA",
"#text": "49"
},
"FtMade": {
"@category": "Free Throws",
"@abbreviation": "FTM",
"#text": "44"
}
}
},
我嘗試在這里進行挖掘,但是似乎找不到有效的解決方案。 如果你們能借給您一些聖人的智慧,我將不勝感激!
謝謝大家!
以JSON為例,如果您試圖查找所有名為“ ID”的屬性(假設它們位於層次結構的同一級別),則可以使用路徑和通配符的“ SelectTokens”方法來達到屬性級別。 這可能會節省幾行代碼,是一種更好的定位方式。
.NET搗鼓這個解決方案- https://dotnetfiddle.net/fQ9xeH
foreach (var tokn in obj.SelectTokens("cumulativeplayerstats.playerstatsentry[*].*.ID"))
{
Console.WriteLine(tokn);
}
您可以修改foreach
以遍歷playerstatsentry
數組:
foreach (JObject child in obj["cumulativeplayerstats"]["playerstatsentry"].OfType<JObject>())
或沒有OfType<T>
:
foreach (var child in obj["cumulativeplayerstats"]["playerstatsentry"])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.