JSON Frameworkを使ってjsonをiPhone(iOS)でパースする。
iPhoneでjsonの解析はぐぐるとすぐに以下のページが出てくる。
[iPhone] JSON Framework の使い方(準備編) | Sun Limited Mt.
[iPhone] JSON Framework の使い方(解析編) | Sun Limited Mt.
ただ、これだと情報が古い。
現在のJSON Frameworkはバージョン2.3.1。
ちょっとやり方が変わっているから、メモ。
参考にしたのは以下のサイト
How to use JSON in Cocoa/Objective-C • Zach Waugh
JSON Frameworkは以下からダウンロードできる。
Google Code Archive - Long-term storage for Google Code Project Hosting.
Downloads · stig/json-framework · GitHub
ダウンロードしたら、解凍したフォルダ内のJSONをプロジェクトのクラス内にコピー。
JSON Frameworkを使うコード内に
#import "JSON.h"
を加える。
twitterのタイムラインをjsonで取ってきてパースするサンプルは以下。
// twitterからstatusesをダウンロードするためのURLリクエストを準備 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://twitter.com/statuses/public_timeline.json"]]; // URLからJSONデータを取得(NSData) NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // JSONで解析するために、NSDataをNSStringに変換。 NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; // JSONデータをパースする。 // ここではJSONデータが配列としてパースされるので、NSArray型でデータ取得 NSArray *statuses = [json_string JSONValue]; // statuses内の要素を取り出して、確認 for (NSDictionary *status in statuses) { // You can retrieve individual values using objectForKey on the status NSDictionary // This will print the tweet and username to the console NSLog(@"%@ - %@", [status objectForKey:@"text"], [[status objectForKey:@"user"] objectForKey:@"screen_name"]); }
参考にしたサイトではSBJSON型のパース領域を用意しているが、これはObjectiv-Cのネイティブクラスであるため、iOSではサポートされてない様子。iOSでパースするために、
NSArray *statuses = [json_string JSONValue];
としている。
ここで、何も考えずに、NSDataをJSON Frameworkにパース用データとして与えたために少しはまってしまった。
確実にNSDataをNSStringに変換してからJSONにパースすること。