本ブログでは以前にJSON Framework、YAJLという2つのJSONパーサの使い方を記載したが、今回は新たにTouchJSONというJSONパーサ&ジェネレータの使い方を記載したいと思う。
ちなみにこのTouchJSONの開発グループはObjective-CのXMLパーサであるTouchXML等も作っている。
- Objective-CのJSON Frameworkを使ってTwitterの情報等を取得する方法 - Tomute’s Notes
- JSONライブラリのYAJLを使ってみる - Tomute’s Notes
[事前準備]
1. 必要なソースコードとライブラリの追加
Google Code Archive - Long-term storage for Google Code Project Hosting.からソースコードをダウンロードする(本日現在だとTouchJSON_1.0.7_Release.tar.bz2というファイルになる)。
ダウンロードしたtarファイルを解凍し、Sourceフォルダ配下のソースコードを全てXCodeのプロジェクトに追加する。
以上で事前準備は終了。非常に簡単である。
[利用方法]
例としてTwitterのつぶやきをJSON形式で取得してきてパースする場合を示す。
#import "CJSONDeserializer.h" - (void)getMyTweets { NSString *urlString = @"http://twitter.com/statuses/user_timeline/tomute.json"; NSURL *url = [NSURL URLWithString:urlString]; NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding]; // TouchJSONを使ったJSONデータのパース処理 NSArray *jsonArray = [[CJSONDeserializer deserializer] deserializeAsArray:jsonData error:nil]; // つぶやきとつぶやいた時刻をダンプ for (NSDictionary *dic in jsonArray) { NSLog(@"%@", [dic objectForKey:@"text"]); NSLog(@"%@", [dic objectForKey:@"created_at"]); } }
ポイントとしてはJSON FrameworkやYAJLの場合と違って、NSStringではなくNSDataが必要である。
また、JSONの内容によってはNSDictionaryに展開される場合もあるのだが、この場合にはdeserializeAsArrayではなく、deserializeAsDictionaryメソッドを使用する。
参考までにJSON Framework、YAJL、TouchJSONのパース速度の比較を、自分のiPhone 3Gを使って実施してみた結果は以下(上記のTwitterのつぶやきをJSON形式で取得してきてパースするという処理の速度比較)。
YAJL | JSON Framework | TouchJSON | |
---|---|---|---|
1回目 | 0.16sec | 0.22sec | 0.29sec |
2回目 | 0.09sec | 0.18sec | 0.23sec |
3回目 | 0.09sec | 0.17sec | 0.23sec |
参考記事