• 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

IOS开发--解析复杂json数据的更多相关文章

  1. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  2. IOS开发之把 JSON 数据转化成 Arrays 或者 Dictionaries

    1 前言通过 NSJSONSerialization 这个类的 JSONObjectWithData:options:error:方法来实现,把JSON 数据解析出来放在数据或者字典里面保存. 2 代 ...

  3. iOS开发网络篇-JSON文件的解析

    一.什么是JSON数据 1.JSON的简单介绍 JSON:是一种轻量级的传输数据的格式,用于数据的交互 JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用 ...

  4. C#的百度地图开发(二)转换JSON数据为相应的类

    原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...

  5. Gson解析复杂Json数据

    背景                                                                   json是一种数据格式,便于数据传输.存储.交换. gson是 ...

  6. 解析天气预报JSON数据

    解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...

  7. mormot解析天气预报JSON数据

    mormot解析天气预报JSON数据 uses SynCommons; constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'&qu ...

  8. 【VueJS】VueJS开发请求本地json数据的配置

    VueJS开发请求本地json数据的配置,旧版本是build/dev-server.js,新版本是build/webpack.dev.conf.js. VueJS开发请求本地json数据的配置,早期的 ...

  9. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

随机推荐

  1. FTP上传和下载文件的应用

    FTP(File Transfer Protocol)协议主要用来在网络上进行文件传输.FTP通讯除了有一个默认的端口21外,还有其他端口,同城两个端口同时进行数据传输.一个是默认的端口(通常为21) ...

  2. Xamarin.Forms学习之位图(一)

    在开始我的分享之前呢,让我先问下我的问题: 1.最近更新了Xamarin 4.1.1.3,我想问下版本更新信息在哪里看? 2.更新后我新建的项目没有UWP项目了(虽然没有用过,但是我想确认是4.1.1 ...

  3. JFrame上添加、删除Jpanel后动态显示界面问题

    JFrame中动态添加或者删除JPanel后总是不正确显示需要的界面问题: 1.删除panel后还是显示之前的界面,新删除的panel在界面上并没有被删除: 2.删除panel1后添加新的panel2 ...

  4. tomcat部署jenkins启动报错:insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.

    在tomcat里面部署jenkins,启动tomcat,在jenkins上操作不久之后,jenkins就挂掉了,查看tomcat控制台,报内存溢出信息: 解决该问题方法,修改tomcat/bin目录下 ...

  5. SpringBoot处理url中的参数的注解

    1.介绍几种如何处理url中的参数的注解 @PathVaribale  获取url中的数据 @RequestParam  获取请求参数的值 @GetMapping  组合注解,是 @RequestMa ...

  6. javascript实例:点亮灯泡

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Linux中的日志功能

    配置文件 /etc/logrotate.conf daily 日志的轮替周期是每天weekly 日志的轮替周期是每周monthly 日志的轮替周期是每月rotate 数字 保留的日志文件的个数comp ...

  8. 016-Hadoop Hive sql语法详解6-job输入输出优化、数据剪裁、减少job数、动态分区

    一.job输入输出优化 善用muti-insert.union all,不同表的union all相当于multiple inputs,同一个表的union all,相当map一次输出多条 示例 二. ...

  9. Java栈和堆的区别

    一.栈空间 1.栈空间存储数据效率高 2.栈中的数据是按“先进后出”的方式管理 3.栈空间存储空间比较小,不能存放大量的数据 4.JVM将基本类型的数据存放在栈空间 帮助理解 1.“客栈” 能提供很多 ...

  10. Linux服务器iops性能测试-iozone

    1. 选用工具: iozone           下载地址:http://www.iozone.org/ (直接下载rpm包) 2. 工具安装: 执行命令: rpm -ivh iozone-3-40 ...