可能重复:
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'
}