美文网首页
iOS·HTTP那点事(2)JSON数据解析

iOS·HTTP那点事(2)JSON数据解析

作者: devRen | 来源:发表于2016-03-13 16:12 被阅读348次

    说明:

    Question:什么是JSON

    • JSON是一种轻量级的数据格式,一般用于数据交互
    • 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
    • JSON的格式很像OC中的字典和数组
     {"name": "jack","age": 10}
     {"names": ["jack","rose","jim"]}
    
    • 标准JSON格式的注意点:key必须用双引号
    • 在iOS中,JSON的常见解析方案有4种
    • 第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
    • 苹果原生(自带):NSJSONSerialization(性能最好,iOS 5.0之后发布,现在主流的JSON解析方法)

    JSON转换为OC数据类型

    要想从JSON中挖掘出具体数据,得对JSON进行解析

    JSON OC
    大括号{} NSDictionary @{}
    中括号[] NSArray @[]
    双引号"" NSString @""
    数字10、10.8 NSNumber @10、@10.8
    true NSNumber @1
    false NSNumber @0
    null NSNull

    返回参数说明

    返回参数说明.png

    返回示例(Json)

    返回示例(Json).png

    NSJSONSerialization的常见方法

    • JSON数据 OC对象
    +(id)JSONObjectWithData:(NSData*)data options:(NSJSONReadingOptions)opterror:(NSError**)error;
    
    • OC对象 JSON数据
    +(NSData*)dataWithJSONObject:(id)objoptions:(NSJSONWritingOptions)opterror:(NSError**)error;
    

    Dome代码演示

    
        // 设置请求路径
        NSURL *url = [NSURL URLWithString:@"http://api.k780.com:88/?app=weather.future&weaid=1&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"];
        // 创建请求对象
        NSURLRequest *reuqest = [[NSURLRequest alloc] initWithURL:url];
        
        // 用NSURLConnection发送异步GET请求
        [NSURLConnection sendAsynchronousRequest:reuqest queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) 
         {
           // 解析JSON
           NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
           NSLog(@"%@", dict);
         }];
    
    • 运行结果:


      运行结果.png
    • 注意点:
    • 如果没有特殊要求NSJSONSerialization方法中的options选kNilOptions
    • NSJSONReadingOptions
      • NSJSONReadingMutableContainers = (1UL << 0)
        • 创建出来的数组和字典就是可变
      • NSJSONReadingMutableLeaves = (1UL << 1)
        • 数组或者字典里面的字符串是可变的
      • NSJSONReadingAllowFragments
        • 允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber

    面向模型开发

    MJExtension框架
    应用场景:

    [ 字典1,
     字典2,
     字典3 ]
    

    如果每个字典都是一个模型,可以用

    NSArray *modelArray = [模型类名 objectArrayWithKeyValuesArray:字段数组];
    

    相关文章

      网友评论

          本文标题:iOS·HTTP那点事(2)JSON数据解析

          本文链接:https://www.haomeiwen.com/subject/bhtflttx.html