使用Objective-c解析来自JSON url的信息

时间:2013-11-18 22:20:27

标签: objective-c json nsstring nsscanner

我正在尝试编写一段将使用reddits JSON格式的代码。我打算访问网址:http://www.reddit.com/r/pics/new/.json,搜索字符串:“title”:“并从那里写下所有内容直到下一个撇号”到日志,继续,直到所有标题都写入日志。

到目前为止,我有这个,但我没有得到任何日志输出。有人能帮助我吗?

- (void)viewDidLoad
{
    NSString *redditString = @"http://www.reddit.com/r/pics/new/.json";
    NSURL *redditURL = [NSURL URLWithString:redditString];
    NSError *error;
    NSCharacterSet *commaSet;
    NSScanner *theScanner;
    NSMutableString *jsonText = [[NSMutableString alloc] init];
    NSString *TITLE = @"\"title\": \"";
    NSString *postTitle;
    commaSet = [NSCharacterSet characterSetWithCharactersInString:@"\""];
    theScanner = [NSScanner scannerWithString:jsonText];
    [jsonText appendString:[NSString stringWithContentsOfURL:redditURL encoding:NSASCIIStringEncoding error:&error]];
    if ([theScanner scanString:TITLE intoString:NULL] && [theScanner scanUpToCharactersFromSet:commaSet intoString:&postTitle] && [theScanner scanString:@"\"" intoString:NULL]) {
             NSLog(@"%@", postTitle);
    }
}

哦,这一切都没有错误,但这并不奇怪。

非常感谢您的帮助,所有提示,更正或其他非常感谢的内容。

1 个答案:

答案 0 :(得分:0)

NSScanner是错误的工具。您最好使用JSON(de)序列化程序,例如NSJSONSerialization

为了让您的生活更轻松,您可以利用AFNetworking,这是一个支持JSON请求的网络框架。您的代码将缩减为类似

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://www.reddit.com/r/pics/new/.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSArray *entries = responseObject[@"data"][@"children"];
    for (NSDictionary *entry in entries) {
        NSLog(@"%@", entry[@"title"]);
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];