摘要:[iOS] Objective-c 對的Json操作(四)
在前面的研究討論到對JSON的物件操作時,多半都是一維陣列。接下來要討論的是多維陣列。
因為一維陣列的時候,Json檔案可以直接被轉型為NSDictionary。但是如果你是多維陣列的Json檔案,
就無法直接轉型為NSDictionary。因為這個Json檔案會被解析為Array的型態。
下方提供一個我用.Net製作的WebApi。試著在瀏覽器中貼上這個網址,可以得到下方的資訊。
http://benluwebapi.azurewebsites.net/api/values
把這個網址貼到Json to C#網站中,可以看到其實這個結構很簡單,提供了Title,Detail與一個image的結構。
在CocoaTouch裏提供了兩個可以迭代取得NSArray與NSDictionary的函數,分別是
enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) 與
enumerateObjectsUsingBlock: ^(id key,id obj,BOOL *stop)
其中前者是針對NSDictionary來迭代取得值,而後者則是針對NSArray。
在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];
//迭代的列出所有Json資料中的Key與Value
[jsonobj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
NSDictionary* array1 = [jsonobj objectAtIndex:idx];
[array1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop){
NSLog(@"key= %@ , Value = %@ ",key,obj);
}];
}];
}
return 0;
}
編譯這個程式,可以看到Json資料呈現出來。
資料被迭代的列印出來後,接著下來就要看看如何把這個資料轉換成物件集合了。
範例程式下載:https://github.com/twbenlu/JsonArrayToOC
參考資料
[__NSCFArray objectForKey:]: unrecognized selector sent to instance