[iOS] Objective-c 對的Json操作(一) NSDictionary<key,Value>

  • 12173
  • 0
  • iOS
  • 2015-07-28

摘要:[iOS] Objective-c 對的Json操作(一)

在.Net的開發中,當要介接WebAPI回傳的Json檔案,可以用C# to Json的網站來吧Json資料序列化回物件,接著再放到泛型集合來操作。在Objective-C的話,預設一般會用NSDictionary來處理Json資料。

這是以<Key,value>的方式在處理Json的資料,這屬於弱型別的資料存取方式。在討論在OC強型別資料

存取之前,先來看看如何在OC裡面用NSDictionary處理資料。

 

這個範例也是使用Facebook所提供的API https://graph.facebook.com/benlu 來取得資料。

在Chrome瀏覽器中輸入網址,可以看到Facebook API所提供關於你的一些個人資料

 

接下來要使用OC來取得這些資料。

這個範例只會使用到Foundation物件,所以只需要使用Command Line專案就可以。

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
		NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/benlu"];
         NSURLRequest *request = [NSURLRequest requestWithURL:url];
        NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
                
        //直接列印出Json格式的內容
        NSString* jSONString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"Json形式是: %@",jSONString);  	
	}
    return 0;
}

 

執行程式後,可以看到從網路上取得的Json資料被列印出來了。在畫面上可以看到的是所有的Json字串資料都被印出來。

 

上面的程式碼是把完整的Json資料給列印出來,

接下來要用<Key,Value>的方式來取得資料。請先參考下方完整的程式碼。

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //建立一個NSURL物件
         NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/benlu"];
         NSURLRequest *request = [NSURLRequest requestWithURL:url];
        NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
      
        //利用的方式取得Json資料
        NSDictionary* jsonObj =
        [NSJSONSerialization JSONObjectWithData:data
                                        options:NSJSONReadingMutableContainers
                                          error:nil];
        NSLog(@"first_name = %@",[jsonObj objectForKey:@"first_name"]);
        NSLog(@"last_name = %@",[jsonObj objectForKey:@"last_name"]);
    }
    return 0;
}

 

重新編譯這個專案後,可以看到這邊用Key值來取出特定的Value。

 

在使用<key,value>取得Json格式中的資料,利用下方的語法。不過這樣的取得的方式就比較屬於弱型別資料格式。

     NSLog(@"first_name = %@",[jsonObj objectForKey:@"first_name"]);
     NSLog(@"last_name = %@",[jsonObj objectForKey:@"last_name"]);

 

如果你遇到的API是複雜型別的時候,例如Google New API。

http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http%3A%2F%2Fnews.google.com%2Fnews%3Foutput%3Drss%26num%3D8

 

熊熊之間是不是眼花撩亂?

把這段Json語法貼近Json to C#網站,可以得到這個物件的結構。把Json檔案序列回物件,就會

比較好了解與操作資料。

 

下一個章節再來看怎麼處理這個作法。

 

範例程式下載:https://github.com/twbenlu/2_UrlToJson/tree/master