iOS网络编程解析协议三:JSON数据传输解析

作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式

基于JavaScript的一个子集

易读性略差,编码手写难度大,数据量小

JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中

作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式

从iOS 5开始,使用NSJSONSerialization对JSON解析

其他常见的三种JSON解析第三方库:SBJson、JSONKit、TouchJson

从性能上来说,NSJSONSerialization最好,JSONKit其次。SBJson使用较为广泛,API简单易用

使用类方法JSONObjectWithData:options:error:可以将接收到的JSON数据反序列化为NSArray或NSDictionary等对象

举例如下:

演示一:将前面演示过的cities.xml解析得到结果后将它保存到cities.json文件中;

演示二:再将cities.json文件中数据解析出来并输出在控制台上。

没解析前的文件截图如下:             解析成功后保存的文件截图:

                          

代码如下:在ViewController类中进行操作

//将这两种演示方式封装

1 - (void)viewDidLoad
2 {
3     [super viewDidLoad];
4     [self JSONObjectFromData]; //将cities.xml文件解析出来并保存到cities.json文件中
5     [self dataFromJSONObject]; //将cities.json文件解析输出 }

//演示一:将本机服务器上的cities.xml解析得到结果后将它保存到cities.json文件中

 1 -(void)dataFromJSONObject
 2 {
 3     //从网络数据生成字典
 4     NSDictionary *dic = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"http://127.0.0.1/userManager/cities.xml"]];
 5
 6     //将字典转换为JSON
 7     NSError *error = nil;
 8     NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error];
 9
10     if(!error)
11     {
12         //将JSON数据保存到文件中
13         NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
14         NSString *documentPath = [documents lastObject];
15
16         NSString *JSONPath = [documentPath stringByAppendingPathComponent:@"cities.json"];
17
18         [[NSFileManager defaultManager] createFileAtPath:JSONPath contents:data attributes:nil];
19     }
20 }

// 演示二:再将cities.json文件中数据解析出来并输出在控制台上

 1 -(void)JSONObjectFromData
 2 {
 3     NSURL *URL = [NSURL URLWithString:@"http://localhost/userManager/cities.json"];
 4
 5     NSData *data = [NSData dataWithContentsOfURL:URL];
 6
 7     //将JSON数据转化为相应的对象
 8     NSError *error = nil;
 9     id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
10
11
12     //判断对象的类型
13     if(!error)
14     {
15         if([obj isKindOfClass:[NSDictionary class]])
16         {
17             NSDictionary *dic = obj;
18             NSLog(@"dic:%@",dic);
19             NSArray *provinces = [dic objectForKey:@"provinces"];
20             [provinces enumerateObjectsUsingBlock:^(NSString *province, NSUInteger idx, BOOL *stop) {
21                 NSLog(@"%@",province);
22             }];
23         }
24         else if([obj isKindOfClass:[NSArray class]])
25         {
26             NSArray *array = obj;
27             NSLog(@"array:%@",array);
28         }
29     }
30 }

演示二结果如下:(内容太多,只给出部分)

     ..............        ..............        "\U65b0\U7586",
        "\U4e91\U5357",
        "\U6d59\U6c5f"
    );
}
2015-09-24 20:09:55.616 04-JSON[3914:247373] 安徽
2015-09-24 20:09:55.616 04-JSON[3914:247373] 澳门
2015-09-24 20:09:55.616 04-JSON[3914:247373] 北京
2015-09-24 20:09:55.616 04-JSON[3914:247373] 重庆
2015-09-24 20:09:55.617 04-JSON[3914:247373] 福建
2015-09-24 20:09:55.617 04-JSON[3914:247373] 甘肃
2015-09-24 20:09:55.617 04-JSON[3914:247373] 广东
2015-09-24 20:09:55.617 04-JSON[3914:247373] 广西
2015-09-24 20:09:55.617 04-JSON[3914:247373] 贵州
2015-09-24 20:09:55.617 04-JSON[3914:247373] 海南
2015-09-24 20:09:55.618 04-JSON[3914:247373] 河北
2015-09-24 20:09:55.618 04-JSON[3914:247373] 河南
2015-09-24 20:09:55.618 04-JSON[3914:247373] 黑龙江
2015-09-24 20:09:55.618 04-JSON[3914:247373] 湖北
2015-09-24 20:09:55.618 04-JSON[3914:247373] 湖南
2015-09-24 20:09:55.618 04-JSON[3914:247373] 吉林
2015-09-24 20:09:55.618 04-JSON[3914:247373] 江苏
2015-09-24 20:09:55.619 04-JSON[3914:247373] 江西
2015-09-24 20:09:55.619 04-JSON[3914:247373] 辽宁
2015-09-24 20:09:55.619 04-JSON[3914:247373] 内蒙古
2015-09-24 20:09:55.619 04-JSON[3914:247373] 宁夏
2015-09-24 20:09:55.619 04-JSON[3914:247373] 青海
2015-09-24 20:09:55.619 04-JSON[3914:247373] 山东
2015-09-24 20:09:55.619 04-JSON[3914:247373] 山西
2015-09-24 20:09:55.686 04-JSON[3914:247373] 陕西
2015-09-24 20:09:55.686 04-JSON[3914:247373] 上海
2015-09-24 20:09:55.686 04-JSON[3914:247373] 四川
2015-09-24 20:09:55.686 04-JSON[3914:247373] 台湾
2015-09-24 20:09:55.687 04-JSON[3914:247373] 天津
2015-09-24 20:09:55.687 04-JSON[3914:247373] 西藏
2015-09-24 20:09:55.687 04-JSON[3914:247373] 香港
2015-09-24 20:09:55.687 04-JSON[3914:247373] 新疆
2015-09-24 20:09:55.687 04-JSON[3914:247373] 云南
2015-09-24 20:09:55.688 04-JSON[3914:247373] 浙江
时间: 2024-12-17 21:02:26

iOS网络编程解析协议三:JSON数据传输解析的相关文章

iOS网络编程解析协议二:XML数据传输解析

XML两种解析方式,一种是SAX,NSXMLParser是SAX方法解析,另一种是DOM(Document Object Model); 区别: SAX: 只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快 常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台 从文档的开始通过每一节点移动,定位一个特定的节点 DOM: 不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档 一般应用与小型的配置XML,方便操作 为载入到内存的文档节点建立类型描述,呈

网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

TCP协议:三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立连接的请求 3:客户端接收到服务端发来的请求,返回接成功给服务端,完成双向连接 第一客戶向服务端发送请求,请求建立连接 服务端同客户端的请求,并同时向客户端发送建立 连接的请求,最后客户端同意后建立 双向连接. C ----> S C <---- S - 反馈机制: 客户端往服务端发送请求,服务端必须返回响应, 告诉客户

iOS网络编程开发—JSON和XML数据解析

iOS网络编程开发—JSON解析 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的

iOS网络编程开发—HTTP协议

iOS网络编程开发—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源

iOS网络编程(三) 异步加载及缓存图片----&gt;SDWebImage

@SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https://github.com/rs/SDWebImage 下载SDWebImage开源包2.将类包拖入工程,再导入MapKit.framework.ImageIO.framework两个框架3.SDWebImage是支持ARC的,在MRC的工程中要注意,可参考MRC工程配置ARC4.注意:SDWebImag

Android网络编程(十一)源码解析Retrofit

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 Android网络编程(七)源码解析OkHttp前篇[请求网络] Android网络编程(八)源码解析OkHttp后篇[复用连接池] Andr

iOS网络编程(7) 第三方开源库-----&gt;AFNetworking

AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象.它的模块架构被良好的设计,拥有丰富的功能,因此,使用起来,必定赏心悦目. @原文链接https://github.com/AFNetworking/AFNetworking,我在此基础上了点配置修改 @介绍 1.支持HTTP请求和基于REST的网络服务(包括GET.POST. PUT.DELETE等) 2.支持ARC 3.要求i

iOS网络编程开发-NSURLConnection基本使用

iOS网络编程开发-NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSU

iOS网络编程笔记——Socket编程

一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是TCP/IP协议的一个十分流行的编程接口.一个socket由一个IP地址和一个端口号唯一确定.TCP/IP协议的传输层又有两种协议:TCP(传输控制协议)和UDP(用户数据报协议).TCP是基于连接的,而UDP是无连接的:TCP对系统资源的要求较多,而UDP少:TCP保证数据的正确性而UDP可能丢包: