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

本文涉及的产品
数据传输服务DTS,同步至DuckDB 3个月
简介:

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

基于JavaScript的一个子集
易读性略差,编码手写难度大,数据量小
JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中
 
作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式
从iOS 5开始,使用NSJSONSerialization对JSON解析
 
其他常见的三种JSON解析第三方库:SBJson、JSONKit、TouchJson

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

使用类方法+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error可以将接收到的JSON

数据反序列化为NSArray或NSDictionary等对象
 
使用类方法+(NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error可以将NSArray或NSDictionary等Foundation对象序列化为JSON数据。
 

使用类方法+ (BOOL)isValidJSONObject:(id)obj来判断Foundation对象是否可以转换为JSON数据。

 

这是ios5中apple增加的解析JSON的api——NSJSONSerialization。网上已经有人做过测试,NSJSONSerialization在效率上完胜SBJSON、TouchJSON、YAJL、JSONKit、NextiveJson。详情见这里。既然apple为我们提供了这么良好的工具,我们没理由不用吧。

  NSJSONSerialization提供了将JSON数据转换为Foundation对象(一般都是NSDictionary和NSArray)和Foundation对象转换为JSON数据(可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据)。

 
举例如下:
 演示一:将前面演示过的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] 浙江
复制代码

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4836404.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
3月前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
4月前
|
JSON 算法 API
淘宝商品评论API接口核心解析,json数据返回
淘宝商品评论API是淘宝开放平台提供的数据服务接口,允许开发者通过编程方式获取指定商品的用户评价数据,包括文字、图片、视频评论及评分等。其核心价值在于:
|
2月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
290 3
|
3月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
445 11
|
2月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
229 0
|
3月前
|
安全 网络性能优化 网络虚拟化
网络交换机分类与功能解析
接入交换机(ASW)连接终端设备,提供高密度端口与基础安全策略;二层交换机(LSW)基于MAC地址转发数据,构成局域网基础;汇聚交换机(DSW)聚合流量并实施VLAN路由、QoS等高级策略;核心交换机(CSW)作为网络骨干,具备高性能、高可靠性的高速转发能力;中间交换机(ISW)可指汇聚层设备或刀片服务器内交换模块。典型流量路径为:终端→ASW→DSW/ISW→CSW,分层架构提升网络扩展性与管理效率。(238字)
1032 0
|
3月前
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。
|
4月前
|
XML JSON JavaScript
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
138 0
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
|
iOS开发
IOS之学习笔记十五(协议和委托的使用)
IOS之学习笔记十五(协议和委托的使用)
190 0
IOS之学习笔记十五(协议和委托的使用)

热门文章

最新文章

推荐镜像

更多
  • DNS