首页 > 代码库 > ios网络学习------5 json格式数据的请求处理

ios网络学习------5 json格式数据的请求处理

JSON正逐步取代XML,成为网络数据的通用格式。

从ios5开始,使用NSJSONSerialization对JSON解析。还有第三方库,比如SBJson, JSONKit, TouchJson等。从性能上说,NSJSONSerizlization最好,JSONKit其次,SBJson使用较为广泛。


加载json文件:

#pragma mark 加载json
- (void)loadJson
{
    NSLog(@"load json");
    //从web服务器加载数据
    NSString *str = @"http://www.baidu.com?format=json";  //这里是乱写的
    //提示:NSData本身具有同步方法,但是在实际开发中,不要使用次方法
    //在使用NSData的同步方法时,无法指定超时时间,如果服务器连接不正常,会影响用户体验。
    //NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
    //简历NSURL
    NSURL *url = [NSURL URLWithString:str];
    //建立NSURLRequest
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
    //建立NSURLConnect的同步方法加载数据
    NSURLResponse *response = nil;
    NSError *error = nil;
    //同步加载数据
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    //错误处理
    if (data != nil) {
        //下面这两句话本身没有什么意义,仅用于跟踪调试。
        NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
        
        //在处理网络数据的时候,不要将NSData转换成nsstring。
        [self handlerJSONData:data];
    }else if (data == nil && error == nil){
        NSLog(@"空数据");
    }else
    {
        NSLog(@"%@", error.localizedDescription);
    }
}
在这里处理得到的nsdata格式的数据解析成json格式的数据。
#pragma mark 处理json数据
- (void)handlerJSONData:(NSData *)data
{
    //json文件中的[]表示一个数据。
    //反序列化json数据
    /*
     序列化: 将一个nsboject转换成序列数据,以便通过互联网进行传输。
     反序列化:将网络上获取的数据反向生成我们需要的对象。
     */
    NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    
    NSLog(@"%@", array);  //json解析以后是nsarray格式的数据。
}