-3

重複の可能性:
iPhone/iOS JSON 解析チュートリアル

Objective C で JSON データを解析する方法に関する多くのチュートリアルを読んできましたが、それでも理解できません。JSON ファイルからデータを解析し、画面に表示したいと考えています。

例えば、

ここからデータを解析し、さまざまな変数でさまざまな小売業者のすべての値を取得して、後で使用できるようにしたいと考えています。

どうすればいいですか?

4

2 に答える 2

2

NSData オブジェクトにデータがあると仮定すると、iOS 5 以降で利用可能な NSJSONSerialization クラスを使用できます。

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error

これは、データ オブジェクトの内容に応じて、データを NSArray、NSDictionary、NSNumber などのオブジェクトに変換するクラス メソッドです。

于 2012-10-21T13:58:07.270 に答える
1

Webサーバーからデータをダウンロードして解析する方法は次のとおりです。これらのメソッドはすべて同じクラスの一部であり_downloadData、typeNSMutableData*および_downloadConnectiontypeという名前のインスタンス変数があることに注意してください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'
}
于 2012-10-21T17:18:27.490 に答える