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.****.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);
}
}