zoukankan      html  css  js  c++  java
  • 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/kenshinobiy/p/4278868.html
    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4503537.html
Copyright © 2011-2022 走看看