iOS Flickr 如何获取 ID



在下面的例子中,我想从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,有时是字符串或数字。

最新更新