-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 服务器下载和解析数据。请注意,所有这些方法都是同一个类的一部分,并且存在名为_downloadDatatypeNSMutableData*_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 回答