zoukankan      html  css  js  c++  java
  • iOS开发网络篇—JSON数据的解析

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

    iOS开发网络篇—JSON介绍

    一、什么是JSON

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

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

     

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

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

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

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

     

    二、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
  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4172457.html
Copyright © 2011-2022 走看看