NSJSONSerialization的简单用法

Posted 思微随想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSJSONSerialization的简单用法相关的知识,希望对你有一定的参考价值。

NSJSONSerialization

苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂。

首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要加载一个NSURL对象,来向网站提交一个Request。到这里需要特别注意了,ios9的时代已经来临,我们先前在旧版本中使用的某些类或者方法都已经被苹果官方弃用了。刚刚我们向网站提交了一个Request,在以往,我们是通过NSURLConnection中的sendSynchronousRequest方法来接受网站返回的Response的,但是在iOS9中,它已经不再使用了。从官方文档中,我们追根溯源,找到了它的替代品——NSURLSession类。这个类是iOS7中新的网络接口,苹果力推之,并且现在用它完全替代了NSURLConnection。关于它的具体用法,还是蛮简单的,直接上代码(ViewController.m文件):

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextView *textView;

@property (nonatomic, strong) NSMutableDictionary *dic;

@property (nonatomic, strong) NSString *text;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)didClickNSJsonButton:(id)sender {
    //GCD异步实现
    dispatch_queue_t q1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(q1, ^{
        NSURL *url = [NSURL URLWithString:@"https://api.douban.com/v2/movie/subject/25881786"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        //使用NSURLSession获取网络返回的Json并处理
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            self.dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            NSString *title = [self.dic objectForKey:@"original_title"];
            NSMutableArray *genresArray = [self.dic objectForKey:@"genres"];
            NSString *genres = [NSString stringWithFormat:@"%@/%@",[genresArray objectAtIndex:0],[genresArray objectAtIndex:1]];
            NSString *summary = [self.dic objectForKey:@"summary"];
            self.text = [NSString stringWithFormat:@"电影名称:%@\n体裁:%@\n剧情介绍:%@",title,genres,summary];
            //更新UI操作需要在主线程
            dispatch_async(dispatch_get_main_queue(), ^{
                self.textView.text = self.text;
            });
        }];
        
        [task resume];
    });
}

 

以上是关于NSJSONSerialization的简单用法的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值

NSJSONSerialization 拆箱 NSNumber?

Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]

使用 NSJSONSerialization 解析 twitter 搜索 json 数据

NSJSONSerialization 没有返回错误

NSJSONSerialization 不解析这个 JSON