【问题标题】:Parsing JSON data in iOS [duplicate]在iOS中解析JSON数据[重复]
【发布时间】:2012-10-11 11:44:46
【问题描述】:

可能重复:
iPhone/iOS JSON parsing tutorial

我已经阅读了许多关于如何在 Objective C 中解析 JSON 数据的教程,但我仍然无法弄清楚。我想解析 JSON 文件中的数据并将其显示在屏幕上。

例如,

我想从here解析数据,得到不同变量中不同零售商的所有值,以便以后使用。

我该怎么做?

【问题讨论】:

  • 看看这个问题中接受的答案:stackoverflow.com/questions/5813077/…
  • 寻找更多示例,如果您在理解它们时遇到困难,那么您对 ​​Objective-C 的理解可能还不够。 JSON 没那么复杂!
  • (当然,你的例子不是JSON,这可能是你不理解的原因之一。)
  • (让我重复一遍。)您所拥有的示例不是有效的 JSON 语法!(有点像 Objective-C NSDictionary 的转储,但是不应作为网页提供。)

标签: objective-c ios json parsing


【解决方案1】:

假设您将数据保存在 NSData 对象中,您可以使用 iOS 5 及更高版本中可用的 NSJSONSerialization 类。

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

这是一个类方法,它将根据数据对象的内容将您的数据转换为 NSArray、NSDictionary、NSNumber 等对象。

【讨论】:

    【解决方案2】:

    以下是从 Web 服务器下载和解析数据的方法。请注意,所有这些方法都是同一个类的一部分,并且有名为 _downloadData 类型为 NSMutableData*_downloadConnection 类型为 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'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      相关资源
      最近更新 更多