访问的 JArray 值具有无效的键值:"fields" 。预期的阵列位置索引



我正在使用监护人 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(对象键)

如果替换

// 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"];

这应该适用于您的示例。请注意您提供的示例中结果后面的方括号,表示应在访问代码中考虑的数组。

最新更新