[iOS] Objective-c 對的Json操作(四) 陣列型態的Json資料的操作

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

http://stackoverflow.com/questions/16963259/nscfarray-objectforkey-unrecognized-selector-sent-to-instance