Twitter 検索結果のJSONデータのパースのメモ

Twitter API のSearch へ投げかけて検索かけた結果を取得、保存したいのだけれど
JSONデータのパース等が難しくかなりつまづいたのでメモ。

□参考にした記事
[iOS]NSJSONReadingMutableLeavesの挙動が謎すぎる - l4
http://kozy.heteml.jp/l4l/2012/10/iosnsjsonreadingmutableleaves.html

iPhone アプリ研究会 NSJSONSerialization使ってみた
http://appteam.blog114.fc2.com/blog-entry-227.html

[iOS]jsonデータを読み込む | モリ☆ログ
http://monoko.sakura.ne.jp/blog/archives/1598

twitterの検索を行い、 結果のJSONをparseする(NSJSONSerialization) - 未来・実装・ほげほげ
http://d.hatena.ne.jp/tototti+dev/20121124/1353768359

STILL WORKING - Objective-CJSONをパースする
http://stillworking.blog.fc2.com/blog-entry-36.html

Twitterドキュメント/検索関連のAPI
http://wiki.tmd45.jp/wiki.cgi?page=Twitter%A5%C9%A5%AD%A5%E5%A5%E1%A5%F3%A5%C8%2F%B8%A1%BA%F7%B4%D8%CF%A2%A4%CEAPI


例えば取得してきたJSONデータの例

{
    "search_metadata" =     {
        "completed_in" = "0.028";
        count = 15;
        "max_id" = 370105375313231872;
        "max_id_str" = 370105375313231872;
        "next_results" = "?max_id=370105309399756799&q=2ch&include_entities=1";
        query = 2ch;
        "refresh_url" = "?since_id=370105375313231872&q=2ch&include_entities=1";
        "since_id" = 0;
        "since_id_str" = 0;
    };
    statuses =     (
                {
              省略(ここに検索結果の様々情報。text要素やuser要素など)
            };
        },

↑のようなJSONデータをとってきてます。
これが1件分。検索なので15件取ってきました。
(search_metadataは私は必要ないので無視しました)
その中から、text要素、user要素の中(screen_name,profile_image_url)
を個別に取得出来ませんでした。

そこでなんとか

    NSError *jsonError;
    NSString *jstr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSData *json_data = [jstr dataUsingEncoding:NSUnicodeStringEncoding];
    
    NSDictionary *searchDictinary = [NSJSONSerialization JSONObjectWithData:json_data
                                                            options:NSJSONReadingAllowFragments error:&jsonError];

    for (NSDictionary *tweet in [searchDictinary objectForKey:@"statuses"]) {
                NSArray* allkeys = [tweet allKeys];
                NSLog(@"%@",allkeys);
                int tempcount = 0;
                //15件分取得
                if(tempcount < 15){
                     [tweetTextArray addObject:[tweet objectForKey:@"text"]];
                    NSDictionary *user = [tweet objectForKey:@"user"];
                    [userNameArray addObject:[user objectForKey:@"screen_name"]];
                    [tweetIconArray addObject:[user objectForKey:@"profile_image_url"]];
                    tempcount += 1;
                }
      }

のように記述して
NSDictionary objectForKeyでまずstatuses部分を取得。
そこからまた objectForKeyでそれぞれの要素を取得しました。
格納していく部分の記述がかなり汚いですが・・・一応取得、格納出来ました。