2011-12-21 47 views
0

在訪問以下URL(http://jamesstenson.com/portraits/?json=1)中的JSON數據時遇到了一些問題,基本上我想訪問「附件」下的「完整」「url」。我此刻的代碼如下:在從NSJSONSerialization生成的NSDictionary中訪問JSON數據

NSError *e = nil; 
NSData *jsonFeed = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://jamesstenson.com/portraits/?json=1"]]; 
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:jsonFeed options:NSJSONReadingMutableContainers error: &e]; 

if (!jsonData) { 
    NSLog(@"Error parsing JSON: %@", e); 
} else { 

    for(NSDictionary *item in [jsonData objectForKey:@"page"]) { 
     for(NSDictionary *attachment in [item objectForKey:@"images"]) { 
      NSLog(@"%@", attachment); 
     } 
    } 
} 

這使得扔了一個錯誤:

2011-12-21 10:13:39.362 JSON[3463:f803] -[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6a7b500 

2011-12-21 10:13:39.363 JSON [3463:F803] *終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:' - [__ NSCFString objectForKey:]:無法識別選擇器發送到實例0x6a7b500'

我知道我錯誤地訪問項目,但無法弄清楚如何實現這一點。我嘗試了幾種解決方案,如http://blogs.captechconsulting.com/blog/nathan-jones/getting-started-json-ios5 - 但沒有運氣。我是iOS開發的新手,對JSON有一點了解。感謝大家提前幫忙。

+0

你確定你的JSON響應(被解析之前)包含了兩個完全命名爲'page'和'images'的項嗎? – Malloc 2011-12-21 10:23:01

+0

您應該明確錯誤來自哪裏(哪條線)。用這個JSON來獲取那個特定的錯誤是沒有意義的。但是你的基本問題是你永遠不會提取「附件」數組。 – 2011-12-21 13:33:44

+0

@熱舔錯誤是在這一行([jsonData objectForKey:@「page」]中的NSDictionary *項),因爲錯誤說[__NSCFString objectForKey:]:無法識別的選擇器,並讓我知道你在我的答案中發現錯誤 – Nakkeeran 2011-12-21 13:46:30

回答

3

的問題是在你的循環

for(NSDictionary *item in [jsonData objectForKey:@"page"]) 

項目中你不會得到NSDictionary中,它會回報你字典鍵,這將是NSString的

檢查此鏈接for each loop in objective c for accessing NSMutable dictionary知道如何通過NSDictionay

遍歷

下面是爲您的要求修改後的代碼,可以幫助你

if (!jsonData) { 
     NSLog(@"Error parsing JSON: %@", e); } else { 
     NSArray *attachments = [[jsonData objectForKey:@"page"] objectForKey:@"attachments"]; 
     for(NSDictionary *object in attachments) { 
       NSLog(@"%@", [object objectForKey:@"images"]); 
       NSLog(@"%@", [[[object objectForKey:@"images"] objectForKey:@"full"] objectForKey:@"url"]); 
     } 
} 
+0

@熱舔什麼是在我的答案下投票的原因是什麼,你能讓我知道,所以我可以糾正自己 – Nakkeeran 2011-12-21 13:38:45

+0

嘿,這真是太棒了!很近!那麼我該如何才能訪問完整大小的URL?如果你能告訴我如何在NSLog函數中吐出它,我會非常高興,並用綠色標記標記你的答案! :D – Nagra 2011-12-21 13:55:16

+0

NSLog(@「%@」,[[[object objectForKey:@「images」] objectForKey:@「full」] objectForKey:@「url」]); – Nakkeeran 2011-12-21 14:01:57