NSJSONSerialization介绍
2016-06-01 00:00
225 查看
apple增加了解析JSON的api——NSJSONSerialization。网上已经有人做过测试,NSJSONSerialization在效率上完胜SBJSON、TouchJSON、YAJL、JSONKit、NextiveJson。既然apple为我们提供了这么良好的工具,我们没理由不用吧。
NSJSONSerialization提供了将JSON数据转换为Foundation对象(一般都是NSDictionary和NSArray)和Foundation对象转换为JSON数据(可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据)。
下面提供一个从豆瓣电台下载的json数据转换的代码
#define kGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)
#define kDoubanUrl @"http://douban.fm/j/mine/playlist?type=n&h=&channel=0&from=mainsite&r=4941e23d79"
-(void) loadJsonData:(NSURL *)url
{
dispatch_async(kGlobalQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
[self performSelectorOnMainThread:@selector(parseJsonData:) withObject:data waitUntilDone:NO];
});
}
-(void) parseJsonData:(NSData *)data
{
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (json == nil) {
NSLog(@"json parse failed \r\n");
return;
}
NSArray *songArray = [json objectForKey:@"song"];
NSLog(@"song collection: %@\r\n",songArray);
_song = songArray;
self.songIndex = 0;
NSDictionary *song = [songArray objectAtIndex:0];
NSLog(@"song info: %@\t\n",song);
}
Foundation对象转换为json数据
NSDictionary *song = [NSDictionary dictionaryWithObjectsAndKeys:@"i can fly",@"title",@"4012",@"length",@"Tom",@"Singer", nil];
if ([NSJSONSerialization isValidJSONObject:song])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:song options:NSJSONWritingPrettyPrinted error:&error];
NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"json data:%@",json);
}
NSJSONSerialization提供了将JSON数据转换为Foundation对象(一般都是NSDictionary和NSArray)和Foundation对象转换为JSON数据(可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据)。
下面提供一个从豆瓣电台下载的json数据转换的代码
#define kGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)
#define kDoubanUrl @"http://douban.fm/j/mine/playlist?type=n&h=&channel=0&from=mainsite&r=4941e23d79"
-(void) loadJsonData:(NSURL *)url
{
dispatch_async(kGlobalQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
[self performSelectorOnMainThread:@selector(parseJsonData:) withObject:data waitUntilDone:NO];
});
}
-(void) parseJsonData:(NSData *)data
{
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (json == nil) {
NSLog(@"json parse failed \r\n");
return;
}
NSArray *songArray = [json objectForKey:@"song"];
NSLog(@"song collection: %@\r\n",songArray);
_song = songArray;
self.songIndex = 0;
NSDictionary *song = [songArray objectAtIndex:0];
NSLog(@"song info: %@\t\n",song);
}
Foundation对象转换为json数据
NSDictionary *song = [NSDictionary dictionaryWithObjectsAndKeys:@"i can fly",@"title",@"4012",@"length",@"Tom",@"Singer", nil];
if ([NSJSONSerialization isValidJSONObject:song])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:song options:NSJSONWritingPrettyPrinted error:&error];
NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"json data:%@",json);
}
相关文章推荐
- JavaScript事件
- 11. jsp与servlet之间页面跳转及参数传递实例
- javascript(八) 函数
- javascript 获取浏览器信息
- javascript(九) 事件捕获/冒泡
- 总结一下Ecmascript和Javascript不一样的地方(1)
- JSP页面获取 list 的长度
- JS前台数据校验(常用)留底备份
- JS函数(内置函数)
- tab.js分享及浏览器兼容性问题汇总
- tab.js分享及浏览器兼容性问题汇总
- Jstorm 集群搭建过程/Jstorm集群一键安装部署
- HTML/CSS/JavaScript实现的2048小游戏
- js !!条件判断或运算的作用
- Createjs学习一
- 谈谈javascript语法里一些难点问题(二)
- 谈谈javascript语法里一些难点问题(一)
- js的性质和一些对象及属性
- 学习RxJS: 导入
- Js的作用域