JSON解析

来源:互联网 发布:淘宝新店铺怎么刷信誉 编辑:程序博客网 时间:2024/05/21 10:37

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);    }}
0 0