Objective-C向けのJSONを扱うライブラリを探してみたのですが、JSONのページによるとJSON解析ライブラリはいくつかあるようです。
json-frameworkというのがトップに紹介されており、また、ライセンスも修正BSDライセンスですので、これを使ってみることにしました。
現在は、SBJsonという名前に変わっているようです。
GitHubから取得
適当な場所で次のようにコマンドをタイプします。
$ git clone git://github.com/stig/json-framework.git
これで json-framework/ というディレクトリが作成され、その中にライブラリソースやサンプルソースがダウンロードされます。
(ちなみに、Mac OS XでGit環境を整えた時のメモはこちら→「Gitを使ってみた « TORQUES LABS」)
上記コマンドでダウンロードしてきた中にはサンプルコード”Examples”があるので、使い方の参考になります。
SBJsonを使ってみる
上記Examplesの中には2つのサンプルプロジェクトがありますが、参考になるのはTweetStreamというサンプル。NSURLRequestを使った非同期通信での使い方が分かります。
JSONの読込完了時に呼ばれるのは、- (void)parser:(SBJsonStreamParser*)parser foundObject:(NSDictionary*)dict というメソッドなので、受信後の処理はここに書けば良さそうです。
SBJsonを使うと、JSONオブジェクトは、NSDictionaryとNSArrayの組みわせになります。ルート部分が上記メソッドの引数 (NSDictionary*)dict となります。
試しにGoogleカレンダーのサンプルJSONで試してみました。
http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json
このURLにアクセスして取得できるJSONの一部をコピペすると下記のような構造になっています。
(後述する操作説明のために、feedの下にtestValueという値を追加しています。)
{ version: "1.0" encoding: "UTF-8" - feed: { testValue: 3 id: { $t: http://www.google.com/calendar/feeds/developer-calendar%40google.com/public/full } - link: [ - { rel: "alternate" type: "text/html" href: http://www.google.com/calendar/embed?src=developer-calendar@google.com } - { rel: http://schemas.google.com/g/2005#feed type: "application/atom+xml" href: http://www.google.com/calendar/feeds/developer-calendar%40google.com/public/full } ] } }
この中の値を取得するコードを載せておきます。
“encoding”の値を出力してみる
ここは普通にNSDictionaryとしてアクセスできますので次のようなコードになります。
NSLog(@"%@", [dict objectForKey:@"encoding"]);
“feed”の下の”link”の値を出力してみる
ここは2階層目がNSArrayなので、次のようなコードでループを回すことが出来ます。
NSDictionary* feed = [dict objectForKey:@"feed"]; NSArray* links = [feed objectForKey:@"link"]; NSEnumerator* enumLink = [links objectEnumerator]; NSDictionary* item; while (item = (NSDictionary*)[enumLink nextObject]) { NSLog(@"%@", [item objectForKey:@"href"]); }
Number値をintとして取得
NSDictionary* feed = [dict objectForKey:@"feed"]; int testValue = [[feed objectForKey:@"testValue"] intValue];
SBJsonWriterでデバッグ出力
デバッグなどでJSONの中身をザックリと確認したい時にはSBJsonWriterというクラスが用意されているので、これを使って次のように簡単にデバッグ出力が可能です。
// debug. SBJsonWriter* writer = [[[SBJsonWriter alloc] init] autorelease]; writer.humanReadable = YES; writer.sortKeys = YES; // キーをソート. NSLog(@"%@", [writer stringWithObject:dict]);
参考サイト
[AD]
↓新モバイルブースター。iPadの充電に対応できているし、容量もアップ!充電速度もアップ!
SANYO USB出力付きリチウムイオンバッテリー (高容量リチウムイオン3.7V5400mAh電池使用) KBC-L54D
Amazon価格:¥ 6,900
カテゴリ:Personal Computers
発売日:2011-09-08
↓これは!!!!SIMの抜き差しが多い人には超便利!
Q-SIM iPhone4 デュアルSIMアダプター Dual SIMカードアダプター(iPhone4 ケース付き)正規パッケージ商品 【日本語説明書付】
定価:¥ 3,980
Amazon価格:¥ 1,680
カテゴリ:エレクトロニクス
↓緊急時用のライトもこれなら普段から出しておける!
↓手をグルグル回して充電可能!














