网络编程—数据解析(JSON)

文艺求关注.png
  • <h5>JSON</h5>
    • 什么是JSON
      • JSON是一种轻量级的数据格式,一般用于数据交互
      • 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
    • JSON的格式很像OC中的字典和数组
      {"name" : "Vincent", "age" : 10}
      {"names" : ["Vincent", "Eli", "Ives"]}
    • 标准JSON格式的注意点:key必须用双引号
    • 要想从JSON中挖掘出具体数据,得对JSON进行解析
      -JSON转换为OC数据类型

<h5>JSON–OC转换对照表</h5>

JSON OC
大括号{ } NSDictionary
中括号[ ] NSArray
双引号" " NSString
数字10、10.8 NSNumber
  • <h5>JSON解析方案</h5>
    • 在iOS中,JSON的常见解析方案有四种
      • 第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
      • 苹果原生,序列化工具(自带):NSJSONSerialization(性能最好
    • NSJSONSerialization的常见方法
      • JSON数据 --> OC对象(反序列化)
        +(id)JSONObjectWithData:(NSData)data options:(NSJSONReadingOptions)opterror:(NSError*)error;
      • OC对象 --> JSON数据(序列化)
        +(NSData)dataWithJSONObject:(id)objoptions:(NSJSONWritingOptions)opterror:(NSError*)error;

<b>序列化/反序列化在代码中的应用</b>

  • 反序列化
- (void)deserialization {   // JSON --> OC对象(反系列化)

    // 01.确定请求路径
    NSURL *url = [NSURL URLWithString:@""];
    
    // 02.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 03.发送异步请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        //data --> 本质上是一个json字符串
        // 04.解析数据
        /**
         JSON --> OC对象  反序列化
         
         @param NSData JSON的二进制数据
         @param NSJSONReadingOptions 位移枚举
         @param NSError 错误信息
         @return NSDictionary
         */
        /**
         NSJSONReadingMutableContainers = (1UL << 0),   // 可变字典或数组
         NSJSONReadingMutableLeaves = (1UL << 1),       // 内部所有的字符串都是可变的,注意iOS7之后有问题,一般不用
         NSJSONReadingAllowFragments = (1UL << 2)       // 既不是字典也不是数组,则必须使用该枚举值(一般用此枚举值)
         */
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@", dic[@"error"]);
        //枚举值:NSJSONReadingAllowFragments使用
        NSString *strM = @"\"By_Vincent\"";
        id obj = [NSJSONSerialization JSONObjectWithData:strM options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"%@------%@---", [obj class], obj);
    }];
}
  • 序列化
- (void)serialization { //OC对象 --> JSON对象(序列化)

    NSDictionary *dictM = @{
                           @"name":@"Vincent",
                           @"age":@"24"
                           };
    NSArray *arrayM = @[@"123", @"456"];
    //注意:并不是所有的OC对象都能转换成JSON对象的
    /**
     - Top level object is an NSArray or NSDictionary   //最外层必须是字典或者是数组
     - All objects are NSString, NSNumber, NSArray, NSDictionary, or NSNull //所有的元素必须是字符串,数字,数组,字典或者NSNull类型
     - All dictionary keys are NSStrings    //所有字典中的key必须是字符串类型
     - NSNumbers are not NaN or infinity    //数字类型必须是正确的数字,不能是无穷大
     */
    BOOL isValid = [NSJSONSerialization isValidJSONObject:dictM];
    if (!isValid) {
        NSLog(@"%zd", isValid);
        return;
    }
    /**
     // OC --> JSON
     @param id 要转化的OC对象
     @param NSJSONWritingOptions 选项:NSJSONWritingPrettyPrinted,自动排版 美观
     @param NSError 错误信息
     @return NSData
     */
    NSData *data = [NSJSONSerialization dataWithJSONObject:dictM options:NSJSONWritingPrettyPrinted error:nil];
    
    NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
关注一下又不会怀孕.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • JSON的简单介绍 1.什么是JSON(1)JSON是一种轻量级的数据格式,一般用于数据交互(2)服务器返回给客户...
    Mario_ZJ阅读 3,980评论 0 0
  • 一、iOS 4种JSON数据解析方法详解 2013年09月10日⁄ 综合⁄ 共 9124字⁄ 字号小中大⁄评论关闭...
    lilinjianshu阅读 6,558评论 0 2
  • JSON JSON和XML都是需要解析的 JSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据...
    JonesCxy阅读 5,926评论 2 10
  • 在网络开发中,从服务器获取的二进制数据包括: > html > 图片 > 视频 > 音频 > zip 等 除了以上...
    方圆十里不留母狗阅读 4,210评论 0 0
  • 在网络开发中,从服务器获取的二进制数据包括: > html >图片 >视频 >音频 > zip等 除了以上文件格式...
    小番茄阳阳阅读 4,166评论 0 0

友情链接更多精彩内容