我正在使用监护人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&pageName=Where+next+for+sustainable+finance%3F+-+open+thread+Article+2043222&ch=Guardian+Sustainable+Business&c2=461773&c4=MIC%3A+Finance+%28GSB%29%2CMIC%3A+Guardian+Sustainable+Business%2CPRO%3A+Sustainability+%28Guardian+Professional%29&c3=theguardian.com&c6=Laura+Paddison&c7=14-Feb-13&c8=2043222&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:使用无效键值访问JArray值:“fields”。预期数组位置索引。
at Newtonsoft.Json.Linq.JArray.get_Item(Object key)
答案 0 :(得分:20)
如果您更换
// 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"];
应该适用于您的示例。请注意您提供的示例中的结果后方括号,表示应在访问代码中考虑的数组。