摘要:[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