IOS开发--解析复杂json数据
- json的自我介绍:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。在实际开发中经常使用JSON来获取服务器上的数据,并通过解析json数据获取我们想要的数据。
下面是一段通过bejson网页校验过的json数据,该json数据结构是最外层是一个字典,字典里面键值“data”又对应着一个字典。data字典里面再包含一个“rows”数组,"rows"数组里面保存着几个字典,如果我们要在下面数据中获取"img"键值对应的数据,我们可以通过下面代码框中的代码来获取。

下图是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);
}
}]
介绍第二种雷同的情况
这里的数据结构和上面的数据结构基本相似,同样通过下面代码就能将获取到我们想要的数据。


[[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数据的更多相关文章
- iOS开发网络篇—JSON数据的解析
iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...
- IOS开发之把 JSON 数据转化成 Arrays 或者 Dictionaries
1 前言通过 NSJSONSerialization 这个类的 JSONObjectWithData:options:error:方法来实现,把JSON 数据解析出来放在数据或者字典里面保存. 2 代 ...
- iOS开发网络篇-JSON文件的解析
一.什么是JSON数据 1.JSON的简单介绍 JSON:是一种轻量级的传输数据的格式,用于数据的交互 JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用 ...
- C#的百度地图开发(二)转换JSON数据为相应的类
原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...
- Gson解析复杂Json数据
背景 json是一种数据格式,便于数据传输.存储.交换. gson是 ...
- 解析天气预报JSON数据
解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...
- mormot解析天气预报JSON数据
mormot解析天气预报JSON数据 uses SynCommons; constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'&qu ...
- 【VueJS】VueJS开发请求本地json数据的配置
VueJS开发请求本地json数据的配置,旧版本是build/dev-server.js,新版本是build/webpack.dev.conf.js. VueJS开发请求本地json数据的配置,早期的 ...
- iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)
一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...
随机推荐
- linux磁盘清理
一.背景: 1.由于linux系统空间是由挂载磁盘得来的,但有时装系统时挂载/根目录空间不大,现仅清除用户下载的大文件 二.方法: 1.输入命令df -h显示当前磁盘挂载(包含剩余空间)情况这里写图片 ...
- Redis持久化之rdb&aof
Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...
- Java中Solr集群的测试
import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.common.SolrInputDoc ...
- CodedUI Test 测试WPF程序,无法获取控件属性值的解决方法
注意注意!ItemStatus 在VS2010的CUIT里面是没有的!需要2013以上的版本才可使用. 公司新程序使用WPF制作,但使用CodedUI Test进行自动化测试的时候,很多控件抓取不到其 ...
- SQLServer中行列转换Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...
- Python3.6全栈开发实例[001]
检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. li = [11,22,33,44,55,66,77,88,99,000,111,222] def func1(l ...
- Libsvm在matlab环境下使用指南
一.安装 http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/.在这个地址上可以下的包含matlab接口的源程序.下载完后可以放到放到任意的盘上解压,最好建 ...
- 第一次java小考心得体会
本周四Java第一次上课,测试了一个ATM程序,从两点半开始到五点半结束. 整整三个小时,结果怎么说呢,大概可以用惨不忍睹来形容吧. 因为之前有一个测试样卷,以为考试内容不会变的我,只是把学生信息管理 ...
- 深度学习2--安装opencv3.1
1\opencv的安装参考视频 2\ 以下内容来自:http://blog.csdn.net/l18930738887/article/details/54696148 本人因为被坑过,所以建议各位最 ...
- mongodb简介和特性
1.mongodb是基于文档的(BSON,类似json的键值对来存储),不是基于表格,易于水平扩展,将内部相关的数据放在一起能提高数据库的操作性能.如果你想新建一个新的文档类型,不用事先告诉数据库关于 ...