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


你可能感兴趣的:(  iOS开发网络篇—JSON介绍)