一尘不染

使用无效的键值“ fields”访问的JArray值。预期的阵列位置索引

json

我正在使用监护人API尝试检索故事,但一直收到异常。json的字符串包含以下json,但是我无法使用LINQ访问主体。

这里是:

{
    "response":{
    "status":"ok",
    "userTier":"approved",
    "total":1,
    "startIndex":1,
    "pageSize":10,
    "currentPage":1,
    "pages":1,
    "orderBy":"newest",
    "results":[{
      "id":"sustainable-business/sustainable-finance-where-next-open-thread",
      "sectionId":"sustainable-business",
      "sectionName":"Guardian Sustainable Business",
      "webPublicationDate":"2014-02-13T13:27:00Z",
      "webTitle":"Where next for sustainable finance? - open thread",
      "webUrl":"http://www.theguardian.com/sustainable-business/sustainable-finance-where-next-open-thread",
      "apiUrl":"http://content.guardianapis.com/sustainable-business/sustainable-finance-where-next-open-thread",
      "fields":{
        "body":"<img src=\"http://hits.theguardian.com/b/ss/guardiangu-api/1/H.20.3/98867?ns=guardian&amp;pageName=Where+next+for+sustainable+finance%3F+-+open+thread+Article+2043222&amp;ch=Guardian+Sustainable+Business&amp;c2=461773&amp;c4=MIC%3A+Finance+%28GSB%29%2CMIC%3A+Guardian+Sustainable+Business%2CPRO%3A+Sustainability+%28Guardian+Professional%29&amp;c3=theguardian.com&amp;c6=Laura+Paddison&amp;c7=14-Feb-13&amp;c8=2043222&amp;c9=Article\" width=\"1\" height=\"1\" />..."
      }
     }]
     }
}

我已经尝试了一切,包括:

string story = (string)ja["response"]["results"]["fields"]["body"];

更新:

public partial class Story : PhoneApplicationPage
{
    string url;
    string jsonData;

    // Http used so the json can be retrived via the get async methods
    HttpClient webClient = new HttpClient();

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (NavigationContext.QueryString.ContainsKey("key"))
        {
            string encodedValue = NavigationContext.QueryString["key"];
            url = Uri.UnescapeDataString(encodedValue);
            textBox.Text = url;
            guardianPanorama();
        }
    }
    private async void guardianPanorama()
    {
        try
        {
            HttpResponseMessage Result = await webClient.GetAsync(url);

            // This takes the http response content and is turned into a string
            jsonData = await Result.Content.ReadAsStringAsync();

            JObject ja = JObject.Parse(jsonData);

            // This takes the current bitcoin price and formats it so there is the      correct amount of decimal places
            string story = (string)ja["response"]["results"]["fields"]["body"];

            // It then gets added to the textbox
            textBox.Text = story;
        }
        catch (Exception errors)
        {
            MessageBox.Show("There has been a error with the Guardian API");
            Console.WriteLine("An error occured:" + errors);
        }
    }
}

例外:

System.ArgumentException:使用无效键值“ fields”访问的JArray值。期望数组位置索引。

在Newtonsoft.Json.Linq.JArray.get_Item(Object key)


阅读 344

收藏
2020-07-27

共1个答案

一尘不染

如果您更换

// This takes the current bitcoin price and formats it so there is the correct amount of decimal places
string story = (string)ja["response"]["results"]["fields"]["body"];

// This takes the current bitcoin price and formats it so there is the correct amount of decimal places
string story = (string)ja["response"]["results"][0]["fields"]["body"];

应该适合您的示例。请注意,在您提供的示例中,结果后面的方括号表示要在访问代码中说明的数组。

2020-07-27