在下面的例子中,我想从Flickr JSON访问ID值(见下文):
{
page = 1;
pages = 336567;
perpage = 20;
photo = (
{
farm = 6;
id = 10573655046;
isfamily = 0;
isfriend = 0;
ispublic = 1;
owner = "32491986@N08";
secret = 91349d9115;
server = 5533;
title = DSC09356;
},
{
farm = 8;
id = 10573936633;
isfamily = 0;
isfriend = 0;
ispublic = 1;
owner = "32491986@N08";
secret = 6abdcaa69e;
server = 7295;
title = DSC09118;
}
);
所以我尝试使用以下模式
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if(json == nil){
NSLog(@"NULL");
}else
NSLog(@" WORKED");
NSArray* flickrPics = [json objectForKey:@"photos"];
NSLog(@"Details: %@", flickrPics); //works
NSDictionary* lastUpload = [flickrPics objectAtIndex:0];
//fails on that line but the idea would have been to then
NSNumber* id = lastUpload[@"photo"][@"id"];
这是错误
2013-10-30 13:43:50.534 JSON1[1508:1303] -[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x8ab3820
那么为什么我有这个错误(我在不同的 JSON 对象上使用了这个模式)那么如何访问id呢?
这是因为这一行:
NSArray* flickrPics = [json objectForKey:@"photos"];
返回的是 NSDictionary,而不是数组
所以我解决了这个问题,需要识别的问题是,在JSON中,照片是一个保存字典数组的键。那么如何访问该数组中的特定项目呢?
//In this case valueForKey @"photo" will return as an array
NSArray *results = [flickr valueForKey:@"photo"];
//next we can iterate through the array. Each element of the Array is a dictionary
for(NSDictionary *UserPhotoData in results){
//now we can retrieve the ID (or whatever piece of data you require
NSNumber *getId = [UserPhotoData valueForKey:@"id"];
NSLog(@" id %@", getId);
}
这行得通。
但是我不确定
1)开发人员如何知道valueForKey返回的内容。有时是NSArray,有时是字符串或数字。