JSON介绍:
作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式
基于JavaScript的一个子集
易读性略差,编码手写难度大,数据量小
JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中
1.解析格式说明:
当数据结构为 {key:value,key:value,...}的键值对的结构时,可以解析成NSDictionary
当数据结构为 ["java","javascript","vb",...]结构时,可以解析成NSArray
2.序列化与反序列化的说明:
序列化:在传输之前,将对象转换成有序的字符串或者二进制数据流
反序列化:将接收到的字符串或者二进制数据流转换成对象或者数组,以便程序访问
3.其他常见的三种JSON解析第三方库:
SBJson 使用最广泛
JSONKit
TouchJson
从iOS 5开始,使用NSJSONSerialization对JSON解析,特点是使用简单,解析性能也不错
- (void)loadJSON { // 1. 从服务器获取数据 GET // 1) url NSURL *url = [NSURL URLWithString:@"http://write.blog.csdn.net/postedit"]; // 2) request NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f]; // 3) 连接同步,可以让用户先有内容可看 NSError *error; // NSData存放的是二进制的数据 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; // 判断返回结果 if (data != nil) { // 正常返回数据 // NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // NSLog(@"%@", result); // 反序列化 NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; NSLog(@"%@", array); // 技巧,从网络上接收到JSON,为了方便阅读,可以将其反序列化之后,保存至文件 [array writeToFile:@"/Users/apple/Desktop/123.plist" atomically:YES]; // 将数据转换成模型,并保存至表格需要的数组中 NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:array.count]; for (NSDictionary *dict in array) { Video *video = [[Video alloc] init]; [video setValuesForKeysWithDictionary:dict]; [arrayM addObject:video]; } _dataList = arrayM; } else if (error == nil) { NSLog(@"返回空数据"); } else { NSLog(@"%@", error.localizedDescription); } }