首页 文章 精选 留言 我的

精选列表

搜索[协议支持],共10000篇文章
优秀的个人博客,低调大师

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

作为一种轻量级的数据交换格式,正在逐步取代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,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册