• 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示意图

    四、部分代码示例

    复制代码
     1 #import "YYViewController.h"
     2 #import "MBProgressHUD+MJ.h"
     3 
     4 @interface YYViewController ()
     5 @property (weak, nonatomic) IBOutlet UITextField *username;
     6 @property (weak, nonatomic) IBOutlet UITextField *pwd;
     7 - (IBAction)login;
     8 
     9 @end
    10 
    11 @implementation YYViewController
    12 
    13 - (IBAction)login {
    14 //    1.提前的表单验证
    15     if (self.username.text.length==0) {
    16         [MBProgressHUD showError:@"请输入用户名"];
    17         return;
    18     }
    19     if (self.pwd.text.length==0) {
    20         [MBProgressHUD showError:@"请输入密码"];
    21         return;
    22     }
    23 //    2.发送请求给服务器(带上账号和密码)
    24     //添加一个遮罩,禁止用户操作
    25     [MBProgressHUD showMessage:@"正在努力加载中...."];
    26 
    27 //
    28 //    1.设置请求路径
    29 //    NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];
    30 //    NSURL *url=[NSURL URLWithString:urlStr];
    31     
    32     // 1.设置请求路径
    33     NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数
    34     
    35 //    2.创建请求对象
    36     NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求
    37     request.timeoutInterval=5.0;//设置请求超时为5秒
    38     request.HTTPMethod=@"POST";//设置请求方法
    39     
    40     //设置请求体
    41     NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];
    42     //把拼接后的字符串转换为data,设置请求体
    43     request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];
    44     
    45     //客户端类型,只能写英文
    46     [request setValue:@"ios+android" forHTTPHeaderField:@"User-Agent"];
    47     
    48 //    3.发送请求
    49     //获取一个主队列
    50     NSOperationQueue *queue=[NSOperationQueue mainQueue];
    51     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    52         //当请求结束的时候调用(有两种结果,一个是成功拿到数据,也可能没有拿到数据,请求失败)
    53         [MBProgressHUD hideHUD];
    54         if (data) {//请求成功
    55             NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    56             //判断后,在界面提示登录信息
    57             NSString *error=dict[@"error"];
    58             if (error) {
    59                 [MBProgressHUD showError:error];
    60             }else
    61             {
    62                 NSString *success=dict[@"success"];
    63                 [MBProgressHUD showSuccess:success];
    64             }
    65         }else   //请求失败
    66         {
    67             [MBProgressHUD showError:@"网络繁忙,请稍后重试!"];
    68         }
    69     }];
    70     NSLog(@"请求发送完毕");
    71 }
    72 @end


    转:
    http://www.cnblogs.com/wendingding/p/3815303.html
  • 相关阅读:
    梦断代码阅读笔记之三
    梦断代码阅读笔记二
    输入法评价
    1的个数
    团队冲刺-10
    第一阶段个人总结03
    第一阶段个人总结02
    第一阶段个人总结01
    学习进度条第十周
    学习进度条第九周
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4278868.html
Copyright © 2020-2023  润新知