OC之JSON数据解析

本文介绍了JSON作为数据交换格式的广泛应用,并讨论了其相对于XML的优缺点。内容包括JSON解析的基本格式,如转化为NSDictionary和NSArray,以及iOS中的序列化和反序列化概念。此外,提到了常用的第三方JSON解析库SBJson、JSONKit和TouchJson,以及自iOS 5起内置的NSJSONSerialization解析器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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);
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值