摘要:[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。
熊熊之間是不是眼花撩亂?
把這段Json語法貼近Json to C#網站,可以得到這個物件的結構。把Json檔案序列回物件,就會
比較好了解與操作資料。
下一個章節再來看怎麼處理這個作法。
範例程式下載:https://github.com/twbenlu/2_UrlToJson/tree/master