重複の可能性:
iPhone/iOS JSON 解析チュートリアル
Objective C で JSON データを解析する方法に関する多くのチュートリアルを読んできましたが、それでも理解できません。JSON ファイルからデータを解析し、画面に表示したいと考えています。
例えば、
ここからデータを解析し、さまざまな変数でさまざまな小売業者のすべての値を取得して、後で使用できるようにしたいと考えています。
どうすればいいですか?
重複の可能性:
iPhone/iOS JSON 解析チュートリアル
Objective C で JSON データを解析する方法に関する多くのチュートリアルを読んできましたが、それでも理解できません。JSON ファイルからデータを解析し、画面に表示したいと考えています。
例えば、
ここからデータを解析し、さまざまな変数でさまざまな小売業者のすべての値を取得して、後で使用できるようにしたいと考えています。
どうすればいいですか?
NSData オブジェクトにデータがあると仮定すると、iOS 5 以降で利用可能な NSJSONSerialization クラスを使用できます。
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error
これは、データ オブジェクトの内容に応じて、データを NSArray、NSDictionary、NSNumber などのオブジェクトに変換するクラス メソッドです。
Webサーバーからデータをダウンロードして解析する方法は次のとおりです。これらのメソッドはすべて同じクラスの一部であり_downloadData
、typeNSMutableData*
および_downloadConnection
typeという名前のインスタンス変数があることに注意してくださいNSURLConnection*
。また、このコードはARCが使用されていないことを前提としていることに注意してください。そうである場合は、オブジェクトのリリースと保持を削除し、インスタンス変数が強力な参照であることを確認してください。
-(void)startDownload {
NSURL* jsonURL = [NSURL URLWithString:@"http://isbn.net.in/9781449394707.json"];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:jsonURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
_downloadData = [[NSMutableData dataWithCapacity:512] retain];
_downloadConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[_downloadData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_downloadData appendData:data];
}
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[_downloadConnection release];
_downloadConnection = nil;
[_downloadData release];
_downloadData = nil;
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
NSError* jsonError = nil;
NSDictionary* jsonDict = nil; // your data will come out as a NSDictionry from the parser
jsonDict = [NSJSONSerialization JSONObjectWithData:_downloadData options:NSJSONReadingMutableLeaves error:&jsonError];
if ( nil != jsonError ) {
// do something about the error
return;
}
[_downloadConnection release];
_downloadConnection = nil;
[_downloadData release];
_downloadData = nil;
// now do whatever you want with your data in the 'jsonDict'
}