2010年10月17日日曜日

JSON on the iPhone

では、iPhoneでJSONをどのように使うのか。

まず、当該サイトがJSONをサポートしているかが問題となる。各サイトのAPI仕様を参照されたい。

次に、当該サイトがJSONをサポートしているとしてiPhoneでのJSONライブラリを組み込む必要がある。
JSONライブラリとしては、JSON Framework、Touch JSONなどの複数が存在するが、ここでは比較的情報の多い、JSON Frameworkでの実装方法を確認したい。

1.JSONライブラリの入手
JSONライブラリは、現時点では以下から入手する。
http://github.com/stig/json-framework/downloads

2.プロジェクトを生成する(作成したいもの、テンプレートは任意)

3.JSONを組み込む
ダウンロードしたファイルのうちClasses配下のファイルを、生成したプロジェクトのClasses配下にJSONフォルダを作成し、コピーする。
*.mファイルには、以下のとおり、JSONヘッダを追記する。

#import "プロジェクト名ViewController.h"
#import "JSON/JSON.h"

@implementation プロジェクト名ViewController


4.データ要求とデリゲートを実装する(以下実装例)
#import

@interface LuckyNumbersViewController : UIViewController {
IBOutlet UILabel *label;
NSMutableData *responseData;
}

- (void)viewDidLoad {
[super viewDidLoad];

 responseData = [[NSMutableData data] retain];


 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.unpossible.com/misc/lucky_numbers.json"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}

// 以下デリゲート
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
label.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
}

// デリゲート終了

- (void)dealloc {
[super dealloc];
}

@end


5.データを利用する(以下実装例)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];

NSArray *luckyNumbers = [responseString JSONValue];

NSMutableString *text = [NSMutableString stringWithString:@"Lucky numbers:\n"];

for (int i = 0; i < [luckyNumbers count]; i++)
[text appendFormat:@"%@\n", [luckyNumbers objectAtIndex:i]];

label.text = text;
}


6.エラー処理を実装する(以下実装例)

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];

NSError *error;
SBJSON *json = [[SBJSON new] autorelease];
NSArray *luckyNumbers = [json objectWithString:responseString error:&error];
[responseString release];

if (luckyNumbers == nil)
label.text = [NSString stringWithFormat:@"JSON parsing failed: %@", [error localizedDescription]];
else {
NSMutableString *text = [NSMutableString stringWithString:@"Lucky numbers:\n"];

for (int i = 0; i < [luckyNumbers count]; i++)
[text appendFormat:@"%@\n", [luckyNumbers objectAtIndex:i]];

label.text = text;
}
}

詳細は以下を参照ください。
http://mobileorchard.com/tutorial-json-over-http-on-the-iphone/

0 件のコメント:

コメントを投稿