iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍
网络编程:HTTP协议、XML数据协议、JSON数据协议:
等待网络处理中……
// 服务器开始返回数据
// 收到服务器返回的数据,本方法会被调用多次
- (void)connection:didReceiveData:
// 数据接收完毕,做数据的最后处理
// 网络连接错误
- (void)connection:didFailWithError:
// 发送数据给服务器,POST 请求使用此方法
- (void)connection:didSendBodyData:totalBytesWritten: totalBytesExpectedToWrite:
unsigned long enconding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)
4、GET请求步骤——1. 地址 2.请求 3.连接 4.启动
(1)定义URL:
sendSynchronousRequest:request returningResponse:&response error:&error
sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
•服务器传输回来的数据,设置要用的编码类型,将汉字GBK编码转为国际通用编码UTF-8编码:
unsigned long encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
※知识拓展:
从 GBK 转到 UTF-8 (上面的例子可作为一个成功案例)
用 NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000) ,然后就可以用initWithData:encoding来实现。
从 UTF-8 转到 GBK
CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000),得到的enc却是kCFStringEncodingInvalidId。
没关系,试试 NSData *data=[nsstring dataUsingEncoding:-2147482063];
注意:必须使用kCFStringEncodingGB_18030_2000这个字符集,那个kCFStringEncodingGB_2312_80试了也不行。
成功案例: 将uif-8格式(xcode默认的)的字符串str_selectedLeiXing 转换为GBK格式的strGBK,如下所示:
NSData *data = [str_selectedLeiXing dataUsingEncoding:-2147482063];
NSString *strGBK = [[NSString alloc]initWithData:data encoding:-2147482063];
以上代码的实现,不需要添加任何附加开发包。
XML:
1、介绍:
可扩展标记语言
用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
SAX(Simple API for XML)只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台从文档的开始通过每一节点移动,定位一个特定的节点
不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档一般应用与小型的配置XML,方便操作为载入到内存的文档节点建立类型描述,呈现可横向移动、潜在巨大的树型结构在内存中生成节点树操作代价昂贵
<1>. 创建NSXMLParser实例,并传入从服务器接收的XML数据<2>. 定义解析器代理<3>. 解析器解析<4.. 通过解析代理方法完成XML数据的解析
4、NSXMLParser解析的NSXMLParserDelegate协议代理方法:
// 1. 开始解析某个元素,会遍历整个XML,识别元素节点名称
- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:
// 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销
- (void)parser:foundCharacters:
// 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息
- (void)parser:didEndElement:namespaceURI:qualifiedName:
注意:在解析过程中,上述三个方法会不停的重复执行,直到遍历完成为止
// 4. 开始解析XML文档
- (void)parserDidStartDocument:
// 5. 解析XML文档结束
- (void)parserDidEndDocument:
// 6. 解析出错
- (void)parser:parseErrorOccurred:
JSON:
1、介绍:
作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式
SBJsonJSONKitTouchJson
- (IBAction)loadJSONData:(id)sender
{
// 定义URL
NSString *urlStr = [NSString stringWithFormat:@"%@/itcast/videos.php?format=json", WEB_ROOT_URL];
NSURL *url = [NSURL URLWithString:urlStr];
// 获取网络数据
NSData *data = [NSData dataWithContentsOfURL:url];
// 反序列化JSON数据,生成NSArray
NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
// 将JSON字典写入文件,便于调试
NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [docs[0]stringByAppendingPathComponent:@"jsonArray.plist"];
[array writeToFile:docDir atomically:YES];
}
<2>存储加载到的数据
// 初始化数据数组
if (_dataList == nil) {
_dataList = [NSMutableArray array];
} else {
[_dataList removeAllObjects];
}
// 填充数组
for (NSDictionary *dict in array) {
Video *video = [[Video alloc]init];
[video setId:[dict[@"id"]integerValue]];
[video setName:dict[@"name"]];
[video setLength:[dict[@"length"]integerValue]];
[video setVideoURL:[NSString stringWithFormat:@"%@%@", WEB_ROOT_URL, dict[@"videoURL"]]];
[video setImageURL:[NSString stringWithFormat:@"%@%@", WEB_ROOT_URL, dict[@"imageURL"]]];
[video setDescription:dict[@"description"]];
[video setTeacher:dict[@"teacher"]];
[_dataList addObject:video];
}
// 刷新表格
[_videosTable reloadData];
iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍的更多相关文章
- 网络编程[第三篇]基于tcp协议实现远程连接
需要用到subprogress模块来远程控制cmd控制台程序来得到控制台的输出信息 一.服务端 —— 控制输出信息 import socket import subprocess #socket实例化 ...
- iOS开发——实战篇Swift篇&UItableView结合网络请求,多线程,数据解析,MVC实战
UItableView结合网络请求,多线程,数据解析,MVC实战 学了这么久的swift都没有做过什么东西,今天就以自己的一个小小的联系,讲一下,怎么使用swift在实战中应用MVC,并且结合后面的高 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- iOS网络编程模型
iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...
- iOS网络编程笔记——Socket编程
一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...
- 网络编程中select模型和poll模型学习(linux)
一.概述 并发的网络编程中不管是阻塞式IO还是非阻塞式IO,都不能很好的解决同时处理多个socket的问题.操作系统提供了复用IO模型:select和poll,帮助我们解决了这个问题.这两个函数都能够 ...
- 从socket开始讲IOS网络编程
home list tags talk user rss Mac&iOS Socket 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半 ...
- ios网络编程学习
//网络访问获取数据//定义一个UIWebView属性,用来展示数据 @property (strong, nonatomic) IBOutlet UIWebView *myWebView; //.. ...
- TCP/IP网络编程中socket的行为
一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...
随机推荐
- Python中列表的各种方法
列表是Python中一种常用的存储信息的方式,所以要熟练掌握列表的各种方法: 首先我们定义一个列表(name),然后练习里面的各种方法: >>> name = ["Sora ...
- 一个简单的ajax上传 上传进度显示
本例用了jquery.form.js请到演示页面查看 CSS Code <style> form { display: block; margin: 20px auto; backgrou ...
- Django学习笔记-2018.11.17
URL配置: 项目下的urls.py配置的为URL总路径,在使用第二种方法在app下配置的urls.py是在总路径下的分路径 Templates: DTL初步使用 render()函数支持dict类型 ...
- Java 8中你可能没听过的10个新特性
lambda表达式,lambda表达式,还是lambda表达式.一提到Java 8就只能听到这个,但这不过是其中的一个新功能而已,Java 8还有许多新的特性——有一些功能强大的新类或者新的用法,还有 ...
- Redis学习篇(九)之生存时间
EXPIRE 设置生存时间,以秒为单位 #### EXPIREAT 设置生存时间,秒时间戳格式 #### PEXPIRE 设置生存时间,毫秒为单位 #### PEXPOREAT 设置生存时间,毫秒时间 ...
- Eigen学习笔记2:C++矩阵运算库Eigen介绍
Eigen常规矩阵定义 1.使用 Eigen的使用在官网上有详细的介绍,这里对我学习过程中用到的基本操作进行介绍.首先是矩阵的定义.在矩阵类的模板参数共有6个.一般情况下我们只需要关注前三个参数即可. ...
- bzoj1116 [POI2008]CLO 边双联通分量
只需对每个联通块的$dfs$树检查有没有返租边即可 复杂度$O(n + m)$ #include <cstdio> #include <cstring> using names ...
- java高并发程序设计模式-并发级别:阻塞、无障碍、无锁、无等待【转载】
一般认为并发可以分为阻塞与非阻塞,对于非阻塞可以进一步细分为无障碍.无锁.无等待,下面就对这几个并发级别,作一些简单的介绍. 1.阻塞 阻塞是指一个线程进入临界区后,其它线程就必须在临界区外等待,待进 ...
- JDK源码(1.7) -- java.util.Arrays
java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...
- 人脸对齐SDM原理----Supervised Descent Method and its Applications to Face Alignment
最近组里研究了SDM算法在人脸对齐中的应用,是CMU的论文<Supervised Descent Method and its Applications to Face Alignment> ...