Xcode4.2でJSONのFramework(SBJson)を使ってみた

今作っている iPhone アプリでは、サーバとのやり取りの際サーバからの戻り値が JSON で返ってくる。
というわけで JSONフレームワークを探して使ってみたのでメモ。


[2012/01/15 update]
iOS 5以降のサポートで良ければ NSJSONSerialization も使えるよ!

SBJson をダウンロードしてくる。

とりあえず Google 先生に iPhone で使える JSONフレームワークを聞いてみると、どうも json-framework というものが多く使われているらしい。(そう言えば、AdMob のライブラリに入ってた気がする。と、思ったら昔入ってたのは TouchJSON だった。)
で、調べてみるとこの json-framework という名前は古くて、今は SBJson という名前だそうで github からダウンロードできる。

github のページを見ると最新版は 3.1alpha3 だそうだ。ん? alpha3?う〜ん、ちょっと alpha は微妙だな。
というわけで、今回は stable となってる 3.0.4 をダウンロードしました。

Version 3.0 と 3.1 の違いは ARC サポートだそうです。今回 JSON を使いたいプロジェクトは ARC を使ってないのでちょうど良かった!

SBJson を Xcode 4.2 のプロジェクトに加える

ダウンロードした SBJson_v3.0.4.zip ファイルを展開するとこんな感じ。

で、この Classes フォルダの中を全部、JSON を使いたい Xcode のプロジェクトに加えれば OK!


自分は SBJson3.0.4というグループを作ってその中にファイルを全部入れました。

これで SBJson を使う準備は整いました。

SBJson で実際にパースをしてみる

コード内で SBJson を使ってパースするには、SBJson.h をインポートして、パーサを作ってパースをするだけです。

こんな感じで使えます。(Mac の Web共有をオンにして自分で作った JSON データ(jsonReplySample.json)を読み込んでパースしてコンソールに表示しています。)

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.11.3/~paraches/jsonReplySample.json"]];
NSData *jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
SBJsonParser *parser = [[[SBJsonParser alloc] init] autorelease];
NSDictionary *jsonDic = [parser objectWithData: jsonData];
NSLog(@"JSON dictionary=%@", [jsonDic description]);

古いバージョンでは一度データを NSString にしてからパースしていたらしいですが、バージョン 3 からはパーサに NSData のままデータを渡すことが可能です。ただし、UTF-8エンコードされている必要があります。