访问从NSJSONSerialization生成的NSDictionary中的JSON数据

时间:2011-12-21 10:20:21

标签: objective-c json ios5 nsdictionary

在访问以下网址(http://jamesstenson.com/portraits/?json=1)中的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有一点了解。感谢大家提前帮助。

1 个答案:

答案 0 :(得分:3)

问题在于你的循环

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

你在项目中没有获得NSDictionary,它将返回Dictionary的键,这将是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"]);
        } 
}