[iOS] Objective-c 對的Json操作(五) 物件集合操作

摘要:[iOS] Objective-c 對的Json操作(五) 物件集合操作

在上一個章節,陣列的Json資料被用迭代的Print出來後,接下來要看到的是如何把這個資料變成物件集合。在.Net的領域中,我們可以用泛型集合的方式來存放大量相同的物件。如:List<RootObject>。

這種方式可以讓我們很方便地去存取資料集合。不過在Objective-c世界並沒有提供List<type>這樣的方法給我們,所以在這邊利用NSMutableArray來做到一樣的效果。接下來就看看如何利用Jastor來儲存與取得資料。

承上一篇,一樣是存取我存放在Azure上的資料。

http://benluwebapi.azurewebsites.net/api/values

 

在main.m檔案裡面將程式做以下的修改:


int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSURL *url = [NSURL URLWithString:@"http://benluwebapi.azurewebsites.net/api/values"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
        
        //取得Json資訊
        NSArray* jsonobj = [NSJSONSerialization JSONObjectWithData:data
                                                           options:NSJSONReadingMutableContainers
                                                             error:nil];
        
        NSMutableArray *Listobj = [[NSMutableArray alloc]init];
        
        //迭代出NSArray裡面的所有值,轉成物件後,存放到NSMutableArray裡面
        [jsonobj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
            NSDictionary* array1 = [jsonobj objectAtIndex:idx];
            RootObject *product = [[RootObject alloc] initWithDictionary:array1];
            [Listobj addObject:product];
        }];
        
        //取得NSMutableArray裡面的值,一一列出。
         [Listobj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
             RootObject *product = [Listobj objectAtIndex:idx];
             NSLog(@"title = %@, detail = %@", product.title,product.detail);
         }];
        
        
    }
    return 0;
}

 

執行這個程式,可以看到從網站上取得的資料被列印出來了。

 

到底為啥要這麼麻煩?把Json資料轉成物件後,在存放到NSMutableArray。然後再從NSMutableArray取出資料?這麼做是不是有其必要?下一篇研究開始要進入UITableView的應用,強型別的資料存取就會變得很好識別了。

 

範例檔案下載位置:https://github.com/twbenlu/JsonToOCCollection