iOSアプリでJSONを読み込む! – SBJson

Filed under iOS SDK, iPhoneアプリ
Tagged as , , ,

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の充電に対応できているし、容量もアップ!充電速度もアップ!

↓これは!!!!SIMの抜き差しが多い人には超便利!

↓緊急時用のライトもこれなら普段から出しておける!

Regoraito: lantern / foot yellow (japan import)

Regoraito: lantern / foot yellow (japan import)

カテゴリ:おもちゃ&ホビー



↓手をグルグル回して充電可能!

レゴライト:ダイナモトーチ(発電式)/ボディブルー

レゴライト:ダイナモトーチ(発電式)/ボディブルー

Amazon価格:¥ 8,200

カテゴリ:おもちゃ&ホビー


One Comment

  1. […] 前回のエントリで紹介したSBJsonが適用している「修正BSDライセンス」についていろいろ再確認しておきたかったので、まとめてメモしておきます。 […]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)