NSJSONSerialization介绍
ios5中apple增加了解析JSON的api——NSJSONSerialization。网上已经有人做过测试,NSJSONSerialization在效率上完胜SBJSON、TouchJSONYAJLJSONKitNextiveJson。详情见这里。既然为我们提供了这么良好的工具,我们没理由不用吧。 NSJSONSerialization提供了将JSON数据转换为Foundation对象(一般都是NSDictionary和NSArray)和Foundation对象转换为JSON数据(可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据)。 下面提供一个从豆瓣电台下载的json数据转换的代码
View Code #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 rn"); return; } NSArray *songArray = [json objectForKey:@"song"]; NSLog(@"song collection: %@rn",songArray); _song = songArray; self.songIndex = 0; NSDictionary *song = [songArray objectAtIndex:0]; NSLog(@"song info: %@tn",song); } Foundation对象转换为json数据 View Code 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); } iOS5.0新功能之——NSJSONSerialization解析JSON数据 - (IBAction)touchWriteButton:(id)sender { - (IBAction)touchReadButton:(id)sender { NSData *jsonData = [[NSData alloc] initWithContentsOfFile:JSON_PATH]; /* Now try to deserialize the JSON object into a dictionary */ NSError *error = nil; id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error]; if (jsonObject != nil && error == nil){ NSLog(@"Successfully deserialized..."); if ([jsonObject isKindOfClass:[NSDictionary class]]){ NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject; NSLog(@"Dersialized JSON Dictionary = %@",deserializedDictionary); } else if ([jsonObject isKindOfClass:[NSArray class]]){ NSArray *deserializedArray = (NSArray *)jsonObject; NSLog(@"Dersialized JSON Array = %@",deserializedArray); } else { NSLog(@"An error happened while deserializing the JSON data."); } } [jsonData release]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – Rails本地资产:预编译 – 是否
- macos – LibPNG Boost :: GIL:找不到png_infop
- c# – 将IList转换为类型为T []的数组会导致枚举
- Dinamica 20110207 update
- schema基本格式及xml引用xsd
- ruby-on-rails – pg_restore:找不到命令
- Libjingle XMPP Login登录返回<failure xmlns=&#
- 聚合数据Android SDK 天气查询演示示例
- 用于ARM上的FFT与IFFT源代码(C语言,不依赖特定
- jQuery的ajax中使用FormData实现页面无刷新上传功