iOS开发网络篇—JSON数据的解析

来源:互联网 发布:nginx luajit 编辑:程序博客网 时间:2024/04/28 17:47

iOS开发网络篇—JSON介绍

一、什么是JSON

JSON是一种轻量级的数据格式,一般用于数据交互

服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)

 

JSON的格式很像OC中的字典和数组

{"name" : "jack", "age" : 10}

{"names" : ["jack", "rose", "jim"]}

标准JSON格式的注意点:key必须用双引号

 

要想从JSON中挖掘出具体数据,得对JSON进行解析。即把JSON 转换为 OC数据类型

 

二、JSON – OC 转换对照表

对照关系

 

三、JSON解析方案

1.在iOS中,JSON的常见解析方案有4种

(1)第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差) 

(2)苹果原生(自带):NSJSONSerialization(性能最好)

 

2.NSJSONSerialization的常见方法

(1)JSON数据 ——》 OC对象

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

 

(2)OC对象 ——》 JSON数据 

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

3.解析来自服务器的JSON示意图

四、部分代码示例

#import "YYViewController.h"#import "MBProgressHUD+MJ.h"@interface YYViewController ()@property (weak, nonatomic) IBOutlet UITextField *username;@property (weak, nonatomic) IBOutlet UITextField *pwd;- (IBAction)login;@end@implementation YYViewController- (IBAction)login {//    1.提前的表单验证    if (self.username.text.length==0) {        [MBProgressHUD showError:@"请输入用户名"];        return;    }    if (self.pwd.text.length==0) {        [MBProgressHUD showError:@"请输入密码"];        return;    }//    2.发送请求给服务器(带上账号和密码)    //添加一个遮罩,禁止用户操作    [MBProgressHUD showMessage:@"正在努力加载中...."];////    1.设置请求路径//    NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];//    NSURL *url=[NSURL URLWithString:urlStr];        // 1.设置请求路径    NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数    //    2.创建请求对象    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求    request.timeoutInterval=5.0;//设置请求超时为5秒    request.HTTPMethod=@"POST";//设置请求方法        //设置请求体    NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];    //把拼接后的字符串转换为data,设置请求体    request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];        //客户端类型,只能写英文    [request setValue:@"ios+android" forHTTPHeaderField:@"User-Agent"];    //    3.发送请求    //获取一个主队列    NSOperationQueue *queue=[NSOperationQueue mainQueue];    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        //当请求结束的时候调用(有两种结果,一个是成功拿到数据,也可能没有拿到数据,请求失败)        [MBProgressHUD hideHUD];        if (data) {//请求成功            NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];            //判断后,在界面提示登录信息            NSString *error=dict[@"error"];            if (error) {                [MBProgressHUD showError:error];            }else            {                NSString *success=dict[@"success"];                [MBProgressHUD showSuccess:success];            }        }else   //请求失败        {            [MBProgressHUD showError:@"网络繁忙,请稍后重试!"];        }    }];    NSLog(@"请求发送完毕");}@end


转自http://www.cnblogs.com/wendingding/p/3815303.html

0 0
原创粉丝点击