在访问以下网址(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有一点了解。感谢大家提前帮助。
答案 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"]);
}
}