• IOS开发--解析复杂json数据


    • json的自我介绍:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。在实际开发中经常使用JSON来获取服务器上的数据,并通过解析json数据获取我们想要的数据。

    下面是一段通过bejson网页校验过的json数据,该json数据结构是最外层是一个字典,字典里面键值“data”又对应着一个字典。data字典里面再包含一个“rows”数组,"rows"数组里面保存着几个字典,如果我们要在下面数据中获取"img"键值对应的数据,我们可以通过下面代码框中的代码来获取。


    Paste_Image.png

    下图是json视图,数据还是和上图中数据相同。


    在创建好一个网络工具类后,通过urlstr获取json数据,并通过json数据解析获取到最外层的字典。

    NSDictionary*dcit=[NSJSONSerialization JSONObjectWithData:responseObjectoptions:0error:nil];

    这里的dcit字典就是刚才看的JSON数据中最外层的字典。我们再根据键值“data”获取到里面第二层的字典dit。

    NSDictionary *dit = dcit[@"data"];

    然后通过键值“rows”获取到rows数组。

    NSArray *rows = dit[@"rows"];

    通过观察校验后的json数据结构,可以看出rows数组里面又是包含着字典,我们通过遍历数组的方法依次取出字典里面的内容,通过键值“img”就能获取到图片的URL

    [[NetWorkTool sharedNetWorkTool]GET:urlstr parameters:nil progress:nil success:^(NSURLSessionDataTask *_Nonnulltask,id _NullableresponseObject) {
    
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:response Objectoptions:0error:nil];
    
    NSDictionary *dataDict = dict[@"data"];
    
    NSArray *rowsArr = dataDict[@"rows"];
    
    NSArray *bannerArr = dataDict[@"little_banner"];
    
    NSArray *arr =@[rowsArr,bannerArr];
    
    if(successBlock) {
    
    successBlock(arr);
    
    }
    
    }failure:^(NSURLSessionDataTask *_Nullabletask,NSError *_Nonnullerror) {
    
    if(failBlock) {
    
    failBlock(error);
    
    }
    
    }]
    

    介绍第二种雷同的情况

    这里的数据结构和上面的数据结构基本相似,同样通过下面代码就能将获取到我们想要的数据。


    12.png

    [[NetWorkTool sharedNetWorkTool]GET:urlstr parameters:nil progress:nil success:^(NSURLSessionDataTask *_Nonnulltask,id _NullableresponseObject) {
    NSDictionary *dcit  = [NSJSONSerialization JSONObjectWithData:response Objectoptions:0 error:nil];
    NSDictionary *dit = dcit[@"data"];
    NSArray *rows =dit[@"rows"];
    NSMutableArray *tmpArr =[NSMutableArray array];
    for(NSDictionary *dict in dictinrows) {
    Model *model = [Model modelWithDict:dict];
    [tmpArr addObject:model];
    }
    if(successBlock) {
        successBlock(tmpArr.copy);
    }
    }failure:^(NSURLSessionDataTask *_Nullabletask,NSError *_Nonnullerror) {
    if(failBlock) {
    failBlock (error);
    }
    }];
    

    这里附上json数据的URL,如果有时间可以尝试下进行解析数据
    [json数据1](http://api.smzdm.com/v2/util/banner?f=iphone&type=haojia_jingxuan&v=7.1.1&weixin=1
    cell数据
    )
    json数据2
    下面插播一则广告,如果看了上面的图片和代码对于数据结构的解析还不是很理解,建议你看下我之前发的关于加载plist文件中数据的文章,文章图文并茂,相信看完后你对于数据结构会有更深入的理解。--->Plist文件如何加载架构复杂的数据
    勘误:上次发文章时因为对简书的Markdown编辑器不熟悉,所以图片排版出现错乱。现在图片和文本格式已经更正了 。



    作者:断风刀
    链接:https://www.jianshu.com/p/8bd5c128e37d
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    C#Excel上传批量导入sqlserver
    RadioButtonList 和CheckBoxList根据后天数据库的值加载时选中其选项
    vue增强第三方UI库(element-ui)
    Vue项目中简易演示axios解耦
    Vue 权限控制 使用自定义指令 代替v-if
    实现水平居中垂直居中的案例
    Sublime Text3高效开发之编写代码块(snippet)
    CSS:布局篇_用flex布局实现两边顶宽中间自适应(圣杯布局&双飞翼布局)
    CSS:盒子_每个元素都有两个盒子(《CSS世界》笔记-块级元素)
    CSS:布局篇_两边顶宽中间自适应(圣杯布局&双飞翼布局)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/9546952.html
Copyright © 2020-2023  润新知