开发中经常用到的JSON解析

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解析

对照关系

开发中经常用到的JSON解析
 

三、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示意图

开发中经常用到的JSON解析

四、部分代码示例

复制代码
 1  #import  "DH ViewController.h "
 2   #import   “MBProgressHUD+DH.h "
 3 
 4 @interface DHViewController ()
 5  @property  (weak,  nonatomic)  IBOutlet  UITextField  *username;
 6  @property  (weak,  nonatomic)  IBOutlet  UITextField  *pwd;
 7  (IBAction)login;
 8 
 9  @end
10 
11 @implementation DHViewController
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/DHServer/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/DHServer/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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值