簡體   English   中英

C#無法在Newtonsoft.Json.Linq.JProperty上訪問子值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM