アトトックラボ

2011年9月06日

iOSでjson-frameworkを使ってみた

Posted by Yoichi Kurusaki

Objective-CのJSONフレームワーク、json-framework を使ってみる。

1. SBJsonをダウンロード

http://stig.github.com/json-framework/から、最新版のSBJson v3.0.4をダウンロードする。

2. SBJson_v3.0.4.zip

ダウンロードしたSBJson_v3.0.4.zipを解凍。

20110906140001.png

3. SBJsonのソースをプロジェクトにコピー

SBJson_v3.0.4/Classesのソースをプロジェクトにコピーしプロジェクトに追加する。

プロジェクトに追加したソース

JSON.h
NSObject+SBJson.h
NSObject+SBJson.m
SBJson.h
SBJsonParser.h
SBJsonParser.m
SBJsonStreamParser.h
SBJsonStreamParser.m
SBJsonStreamParserAccumulator.h
SBJsonStreamParserAccumulator.m
SBJsonStreamParserAdapter.h
SBJsonStreamParserAdapter.m
SBJsonStreamParserState.h
SBJsonStreamParserState.m
SBJsonStreamWriter.h
SBJsonStreamWriter.m
SBJsonStreamWriterAccumulator.h
SBJsonStreamWriterAccumulator.m
SBJsonStreamWriterState.h
SBJsonStreamWriterState.m
SBJsonTokeniser.h
SBJsonTokeniser.m
SBJsonUTF8Stream.h
SBJsonUTF8Stream.m
SBJsonWriter.h
SBJsonWriter.m

20110906140002.png

3. JSONファイルを読み込む

top_menu.jsonというJSONファイルを作成し、top_menu.jsonを読み込込んでみる。

top_menu.json



{
"top_menu":[
{
"title": "hogehoge-1",
"detail": "1111111111"
},
{
"title": "hogehoge-2",
"detail": "2222222222"
},
{
"title": "hogehoge-3",
"detail": "3333333333"
},
{
"title": "hogehoge-4",
"detail": "4444444444"
}
]
}


Objective-Cのサンプル

NSError *err = nil;
NSString *path = [[NSBundle mainBundle] pathForResource:@"top_menu" ofType:@"json"];
NSString *str = [NSString stringWithContentsOfFile:path 
                                          encoding:NSUTF8StringEncoding 
                                             error:&err];
NSLog(@"str : %@",str);
if(!err) {
    if ([[str JSONValue] isKindOfClass:[NSDictionary class]]) {
        NSDictionary *menu = (NSDictionary*)[str JSONValue];
            
        if ([[menu objectForKey:@"top_menu"] isKindOfClass:[NSArray class]]) {
            NSArray *items = [menu objectForKey:@"top_menu"];
            for(id item in items){
                NSLog(@"--------------------");
                NSLog(@"title : %@",[(NSDictionary*)item objectForKey:@"title"]);
                NSLog(@"detail : %@",[(NSDictionary*)item objectForKey:@"detail"]);
            }
        }
    }
}
    

実行結果

2011-09-06 21:24:57.314 test[23097:b303] str : {
"top_menu":[
{
"title": "hogehoge-1",
"detail": "1111111111"
},
{
"title": "hogehoge-2",
"detail": "2222222222"
},
{
"title": "hogehoge-3",
"detail": "3333333333"
},
{
"title": "hogehoge-4",
"detail": "4444444444"
}
]
}
2011-09-06 21:24:57.316 test[23097:b303] --------------------
2011-09-06 21:24:57.317 test[23097:b303] title : hogehoge-1
2011-09-06 21:24:57.318 test[23097:b303] detail : 1111111111
2011-09-06 21:24:57.318 test[23097:b303] --------------------
2011-09-06 21:24:57.319 test[23097:b303] title : hogehoge-2
2011-09-06 21:24:57.319 test[23097:b303] detail : 2222222222
2011-09-06 21:24:57.320 test[23097:b303] --------------------
2011-09-06 21:24:57.320 test[23097:b303] title : hogehoge-3
2011-09-06 21:24:57.321 test[23097:b303] detail : 3333333333
2011-09-06 21:24:57.321 test[23097:b303] --------------------
2011-09-06 21:24:57.322 test[23097:b303] title : hogehoge-4
2011-09-06 21:24:57.322 test[23097:b303] detail : 4444444444

これでJSONデータを、簡単に扱うことができます。