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

iOS开发网络篇—JSON数据的解析的更多相关文章

  1. iOS开发网络篇—XML数据的解析

     iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...

  2. iOS开发网络篇-JSON文件的解析

    一.什么是JSON数据 1.JSON的简单介绍 JSON:是一种轻量级的传输数据的格式,用于数据的交互 JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用 ...

  3. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  4. iOS开发网络篇—JSON介绍

    一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {" ...

  5. iOS开发网络篇—发送json数据给服务器以及多值参数

    iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 ...

  6. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  7. iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

    iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConn ...

  8. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  9. iOS开发网络篇—HTTP协议

    iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

随机推荐

  1. Threading Module源码概述(二)

    在threading 模块中,提供了列举当前所有子线程的操作.threading.enumerate.这个操作很简单,就是将_active和_limbo中维护的线程集合的信息输出. def enume ...

  2. RabbitMQ-清空队列中(一个channel或连接中)的Unacknowledged状态的消息

    清空所有:nack 时将参数delivery-tag设为0,multiple设为1. 清空小于等于某delivery-tag的所有消息:nack 时将参数delivery-tag设为正数(介于1和92 ...

  3. Maven deploy

      1.在maven/conf/setting.xml中: 在<servers>中加入 <server> <id>internal</id> <u ...

  4. Qt Quick 事件处理之信号与槽

    前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本的语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经能够完毕 ...

  5. 排序(5)---------高速排序(C语言实现)

    继shell发明了shell排序过后呢,各位计算机界的大牛们又開始不爽了,为什么他能发明.我就不能发明呢.于是又有个哥们蹦出来了.哎...那么多排序,就木有一个排序是中国人发明的.顺便吐槽一下,一百年 ...

  6. CSRF——攻击与防御

    CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...

  7. [Javascript] Proper use of console.assert in JavaScript

    Learn about console.assert, which is syntactic sugar for logging an error the console when a given c ...

  8. log4j 日志的初始化

    log4j 不指定时,log4j 会默认进行初始化,如果想要制定log4j.properties的位置时,可以进行指定: PropertyConfigurator.configure(): 参数里面加 ...

  9. Referenced file contains errors (http://tiles.apache.org/dtds/tiles-config_3_0.dtd)

    java开发时遇到的问题,之前还是好好的,没有错误提示.可是今天一打开项目就出现这种问题.真不知道是怎么回事,在这里求助.错误如下: Referenced file contains errors ( ...

  10. C++ | 调试 · 从汇编代码看i++和++i的区别

    以int类型为例 C++编译器为++i生成的代码是 013E1375 mov eax,dword ptr [i] 013E1378 add eax, 013E137B mov dword ptr [i ...