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

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

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


IOS开发--解析复杂json数据
Paste_Image.png

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


IOS开发--解析复杂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); } }] 

介绍第二种雷同的情况

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


IOS开发--解析复杂json数据
12.png

IOS开发--解析复杂json数据
[[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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。