使用苹果原生的JSON数据解析浅析


一、什么是JSON数据?

    1.

    JSON:是一种轻量级的传输数据格式,用于数据交互

    JSON 是 javascript 语言的一个子集。

    javascript 是个脚本语言(不需要编译),用来给HTML增加动态功能,javascriptjava没有半毛钱的关系!

    服务器返回给客户端的数据,一般都是 JSON 格式或者 XML 格式(文件下载除外)。

    

    2.

语法规则:

    <1> 数据以键值的方式保存;

        (key)必须用双引号("key"),与键值之间以':'分隔; {"name":"花无缺"}

    <2> 数据和数据之间以逗号(,)分隔. {"name":"花无缺","age":13}

    <3> {}表示对象. "person":{"name":"花无缺","age":13}

    

    <4> []表示数组. "persons":[

            {"name":"花无缺","age":13},

            {"name":"小鱼儿","age":14},

            {"name":"邀月","age":15}

        ]

    

    3.

    JSONOC转换对照:

    大括号 {} == NSDictionary;

    中括号 [] == NSArray;

    双引号 " " == NSString;

    数字  13,13.5 == NSNumber;

    

    4.

  数据传输过程

    客户端发送请求给服务器,服务器接收到客户端的请求之后,返回给客户端JSON数据客户端需要把服务器返回的JSON数据转换为OC的数据格式(数组/字典等)。


二、JSON数据解析


    1.JSON解析方法:

    使用第三方框架和苹果原生JSON解析器。

    iOS,常见的JSON数据解析方案有4:

    第三方框架:JSONKit, SBJson【最流行】, TouchJson.性能从左到右,依次变差(iOS 5(2011)以前)。

    苹果原生(自带):NSJSONSerialization (性能是最好的,iOS5以后推出)。


    2.

解析JSON数据

    <1> 反序列化(解析):   

    目的: JSON数据 --> OC对象得到数据字典或者数据数组。

    将从服务器接收到的JSON数据(二进制数据)转换成OC数据类型(NSArray,NSDictionary)的过程。


    好处: 简化程序的开发,方便后续的字典转模型.

    方法:

    + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

    <2> 序列化:    

  目的:OC对象 --> JSON数据得到二进制JSON数据 NSData。

 将数组或者字典发送给服务器之前转换成二进制数据

    好处:方便网络传输,提高传输速度

    方法:

    + (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

    需要注意的是,在做序列化之前,一定使用 isValidJSONObject 检测一下要序列化的对象,是否能够正确被序列化,避免出现闪退


JSON解析示例如下:

    // JSON的序列化
    NSDictionary *dict1 = @{@"name":@"花无缺",@"10":@19,@"height":@"180"};
    NSDictionary *dict2 =@{@"person":dict1};
    NSArray *array = @[@"zhangsan",@"小鱼儿",@"wangwu",dict2];
    
    BOOL is_YES = [NSJSONSerialization isValidJSONObject:array];
    
    if (is_YES) {
        NSData *arrayJson = [NSJSONSerialization dataWithJSONObject:array options:0 error:NULL];
        [arrayJson writeToFile:@"/Users/zhanghongyu/Desktop/task2" atomically:YES];
    }

    // JSON的反序列化
    NSArray *dataArray = [NSJSONSerialization JSONObjectWithData:arrayJson options:0 error:nil];
    NSLog(@"%@",dataArray);


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值