Objective-C
Xcode
iOS

Objective-CでJSON取得して表示する方法

More than 3 years have passed since last update.


条件

今回は適当に東京電力電力供給状況APIからJSON形式で当日の「供給可能最大電力」と現在の「消費電力」を表示する。

-東京電力電力供給状況APIを利用

-日時を取得し2時間前の消費電力を取得する

-西暦、月、日、時間をそれぞれ取得

-json形式で取得する


手順


日付を取得して西暦、月、日、時間をそれぞれ取得

//現在の日付を取得

NSDate *now = [NSDate date];

//NSCalendarでフォーマット
NSCalendar *calendar = [NSCalendar currentCalendar];

NSUInteger flags;
NSDateComponents *comps;
//西暦、月、日、時間をそれぞれ取得
flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit ;
comps = [calendar components:flags fromDate:now];


西暦、月、日、時間をそれぞれ変数に代入

NSInteger year = comps.year;

NSInteger month = comps.month;
NSInteger day = comps.day;
//2時間前を取得する為-2する
NSInteger hour = comps.hour - 2;


東京電力のAPI取得URLを生成

//元のURL

NSString *orign = @"http://tepco-usage-api.appspot.com";
//http://tepco-usage-api.appspot.com/西暦/月/日/時間.jsonとなるように生成
NSString *url = [NSString stringWithFormat:@"%@/%ld/%ld/%ld/%ld.json",orign,year,month,day,hour];


NSURLRequestの生成

//NSURLからNSURLRequestを作る

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
//サーバーとの通信を行う
NSData *json = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//JSONをパース
NSArray *array = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingAllowFragments error:nil];


NSLogで表示

NSLog(@"供給可能最大電力:%@万kW 消費電力:%@万kW", [array valueForKeyPath:@"capacity"], [array valueForKeyPath:@"usage"]);


完成系

NSDate *now = [NSDate date];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger flags;
NSDateComponents *comps;

flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit ;
comps = [calendar components:flags fromDate:now];

NSInteger year = comps.year;
NSInteger month = comps.month;
NSInteger day = comps.day;
NSInteger hour = comps.hour - 2;

NSString *orign = @"http://tepco-usage-api.appspot.com";
NSString *url = [NSString stringWithFormat:@"%@/%ld/%ld/%ld/%ld.json",orign,year,month,day,hour];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSData *json = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSArray *array = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingAllowFragments error:nil];
NSLog(@"供給可能最大電力:%@万kW 消費電力:%@万kW", [array valueForKeyPath:@"capacity"], [array valueForKeyPath:@"usage"]);