2012-10-21 296 views
-3

可能重复:
iPhone/iOS JSON parsing tutorial解析JSON数据

我一直在阅读关于如何分析目标C JSON数据很多教程,但还是我无法弄清楚。我想解析JSON文件中的数据并在屏幕上显示它。

例如,

我想从here分析数据,并获得不同的变量不同的零售商的所有值,这样我可以在以后使用它们。

我该怎么办?

+1

采取这个问题看看接受的答案: http://stackoverflow.com/questions/5813077/iphone-ios-json-parsing-tutorial – uldall

+0

看到:HTTP://计算器。 com/questions/10241908/parsing-json-data-in-ios-objective-c-and-displayed-in-tableview-getting-empt – Farshid

+0

寻找更多的例子,如果你无法理解它们,你对目标的理解-C可能不足。 JSON并不复杂! –

回答

2

假设你有一个NSData对象中的数据,你可以使用iOS 5及更高版本中可用的NSJSONSerialization类。

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

这是一个类的方法,将您的数据转换成取决于您的数据对象的内容类似的NSArray,NSDictionary的,NSNumber的对象等。

1

下面介绍如何下载和解析来自Web服务器的数据。请注意,所有这些方法都是同一类的一部分,并且存在类型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' 
}