一、什么是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. 在IIS EXPRESS下运行一个visual studio 项目,跳转到另一个项目的解决方案。
  2. MySQL 更新语句技巧
  3. TGridPanel做一个自动按比例缩放的窗体
  4. 《深入理解linux内核》第三章 进程
  5. .Net框架与框架类库-转
  6. C语言中所有变量和常量所使用的内存总结
  7. Flashback Query(函数示例)
  8. C++ Primer 读书笔记: 第8章 标准IO库
  9. MySql之ALTER命令用法详细解读(转)
  10. 关于iTunes随机播放和我所不知道的自己
  11. hadoop集群中删除原有jdk设置
  12. linux 查看cpu个数,内存情况,系统版本
  13. Cygwin获取root权限
  14. sql 存储过程学习
  15. BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
  16. GitHub私有代码库将免费开放
  17. 在ASP.NET Core中实现自定义验证特性(Custom Validation Attribute)
  18. mysql的in查询分析
  19. Android Studio 默认keystore 以及自定义keystore
  20. springMvc的执行流程(源码分析)

热门文章

  1. C++标准转换运算符reinterpret_cast
  2. WAF绕过小结
  3. 使用注解实现IOC
  4. 如何调试R程序(转载)
  5. asp.net过滤数据中有异常数据字符串
  6. vmware, failed to lock the file
  7. RHEL 安装gcc 艰难历程
  8. Android Broadcast Receiver 使用入门
  9. 15 条实用 Linux/Unix 磁带管理命令
  10. UIView中UIButton设置监听