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中的字典 ...
随机推荐
- Java基础 - 函数与方法
java 是一门面向对象编程,其它语言中的函数也就是java中的方法 方法的基本使用方法 package com.demo7; /* * 函数/方法 * * 定义格式: * 修饰符 返回值类型 方法名 ...
- 基于HttpClient、Jsoup的爬虫获取指定网页内容
不断尝试,发现越来越多有趣的东西,刚刚接触Jsoup感觉比正则表达式用起来方便,但也有局限只适用HTML的解析. 不能尝试运用到四则运算中(工作室刚开始联系的小程序). 在原来写的HttpClient ...
- XShell安装(五)
Xshell就是一个远程控制Centos的软件:(用XShell比较方便,试用的都知道,界面也人性化) 详细介绍请看 百度百科 我随便百度下载了一个中文版的 给下地址 http://rj.baidu ...
- 解决Initializing Java Tooling 和 Initializing Java Tooling卡死问题
遇到了如题的问题,使用如下方法解决了 工作中eclipse崩溃,再次启动后,状态栏一直显示 Initializing Javascript Tooling . 解决方案: 删除\workspace\ ...
- Echarts-雷达图
// 显示能力雷达图 $(".company .grade").hover(function () { $(".powerChart").show(); var ...
- 一、Nuxt简介
1.Nuxt是什么 Nuxt.js是基于vue的服务器端渲染框架,常用来做SSR(服务器端渲染) 2.为什么用Nuxt Vue开发的SPA(单页应用)不利于搜索引擎的SEO优化 3 ...
- Cassandra代替Redis?(转)
原文:Cassandra代替Redis? 最近用Cassandra的又逐渐多了,除了之前的360案例,在月初的QCon Shanghai 2013 篱笆网也介绍了其使用案例.而这篇百万用户时尚分享网站 ...
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
修改device/other/TBDG1073/ system.prop文件 1.设置默认语言 找到device/other/TBDG1073/ system.prop文件,修改属性ro.produc ...
- Js中localStorage
优点: 1.拓展了cookie的4K限制 2.将数据直接存储到本地,相当于一个5M的前端页面数据库 不足: 1.浏览器的大小不统一 2.IE8以上的IE版本才支持 3.localStorage的值类型 ...
- PyNN:神经网络模拟器的通用接口
PyNN:神经网络模拟器的通用接口 计算神经科学已经产生了用于模拟神经元网络的多样化软件,同时具有消极和积极的后果.一方面,每个模拟器都使用自己的编程或配置语言,导致将模型从一个模拟器移植到另一个模拟 ...