JSON数据解析之苹果原生

来源:互联网 发布:大数据转型的企业 编辑:程序博客网 时间:2024/04/29 01:16

一、什么是JSON数据?

    1.

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

    JSON 是 javascript 语言的一个子集。

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

    服务器返回给客户端的数据,一般都是 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.

    JSON与OC转换对照:

    大括号 {} == 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);

0 0
原创粉丝点击