IOS AFNetworking的使用与YYModel解析JSON数据

Posted 全栈攻城狮之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS AFNetworking的使用与YYModel解析JSON数据相关的知识,希望对你有一定的参考价值。

ios AFNetworking的使用与YYModel解析JSON数据(二)


一个人习惯了忙碌,突然闲下来,发现自己一个人真的很无聊,发呆发着发着情绪也会变得焦虑。时间是宝贵的,何不用发呆的时间给自己充点知识呢?

                                            ---- 就业


续篇,上篇“IOS AFNetworking的使用与YYModel解析JSON数据(一)”介绍了如何使用cocoapod导入AFNetworking与YYModel框架,使用AFNetworking监听网络状态改变,封装post,get以及图片文件上传方法。本篇继续介绍如何调用封装的post,get方法执行网络请求,如何使用YYModel解析api返回的json数据。

1
使用封装的post,get方法执行网络请求

以调用我之前写的椰子商城app的接口为例,接口域名http://wujiuye.yezishop.shop。关于椰子商城app已开源在github,该项目是我在校做的一个android期末作品,源码可在https://github.com/wujiuye/YeZiShop和https://github.com/wujiuye/YeZiShopWeb下载。


ViewController.xib页面内容:一个UILabel控件,用于显示请求结果;两个UIButton按钮,点击发送post请求与get请求。



ViewController.m中为“发送post请求“按钮和“发送get请求“按钮添加点击事件:

IOS AFNetworking的使用与YYModel解析JSON数据(二)


当点击“发送post请求“按钮时,调用HttpsNetworkManager封装的doPost方法发送一个post请求并获取返回的json字符串,将json字符串显示到屏幕上:

IOS AFNetworking的使用与YYModel解析JSON数据(二)


当点击“发送get请求“按钮时,调用HttpsNetworkManager封装的doGet方法请求api接口并将返回json字符串显示到屏幕上:

IOS AFNetworking的使用与YYModel解析JSON数据(二)


编译运行项目,观察运行结果:

IOS AFNetworking的使用与YYModel解析JSON数据(二)

因为接口支持post和get请求,所以两种方式请求同一api的结果都是相同的。


2
使用YYModel解析json数据

接口:http://wujiuye.yezishop.shop/api/search?type=keyword&keywordOrClass=毛衣&page=1的请求结果如下:

IOS AFNetworking的使用与YYModel解析JSON数据(二)

json数据包含三个字段:error_code服务器返回的请求状态码,error_message服务器返回的请求状态信息,data为请求返回的数据。data下面包含一个字段:merchlist,merchlist字段为商品搜索结果列表,每个商品包含的字段信息又很复杂,比如一个商品有颜色尺码列表,图片列表,参数列表。

IOS AFNetworking的使用与YYModel解析JSON数据(二)


像这样复杂的json数据如何使用YYModel做解析? 首先先定义商品Model(商品类)。

首先将merchlist数组里面的每个字段抽象为一个类,如下表格:

# merchlist数组的item抽象为一个类Merch 字段类型
1 clas(商品分类) 对象
2 colorSize(颜色尺码列表)
数组
3 htmlBody(商品详情) 字符串
4 id 整型
5 images(图片列表) 数组
6 merchName(商品名称) 字符串
7 parameter(商品参数) 数组
8 pirce(单价) 浮点数
9 sales(好像是浏览量,忘了) 整型


将merch类中类型为对象的属性抽象为一个类,将merch类中类型为数组的的属性的每个item抽象抽象为一个类(看情况,有时候可以使用字典类替代)。


# merch类的clas字段:Clas类 字段类型
1 id 整型
2 imgUrl(分类图标)
字符串
3 name(分类名称) 字符串
4 parentsClass(指向父分类) Clas类


# merch类的colorSize数组的item:ColorSize类 字段类型
1 id 整型
2 color(颜色)
字符串
3 size(尺码) 字符串
4 stock 整型


# merch类的images数组的item:MerchImage类 字段类型
1 id 整型
2 bigPath(大图路径)
字符串
3 newPath 字符串


#

merch类的parameter数组

的item:MerchParameter类

字段类型
1 id 整型
2 key
字符串
3 value 字符串


用Object-c实现上面列表中的类:

  1. 在项目根目录下新建文件夹,命名为Model。(下面给出gif图,我在刚开始学ios开发的时候百度找了好多教程都找不到教怎么像android一样建一个文件夹而不仅仅只是建一个分组的教程,后面自己摸索出来的,在这分享给各位有需要的朋友。)

    IOS AFNetworking的使用与YYModel解析JSON数据(二)

  2. 在Model下新建一个Clas类,ColorSize类,MerchImage类,MerchParameter类,Merch类:

    IOS AFNetworking的使用与YYModel解析JSON数据(二)

Clas类:

由于id是oc的关键字,所以将所有的id字段改为mid。YYModel解析json为oc对象时,如果类的属性名与json的字段名相同,那么不需要自定义解析映射。由于Clas类的mid与json中的id字段名不同,所以需要实现一个类方法modelCustomPropertyMapper

方法,该方法返回的是一个字典类对象NSDictionary,其中key为oc类中的属性名,value为对应json的字段名。

IOS AFNetworking的使用与YYModel解析JSON数据(二)

Clas类还包含一个parentsClass属性,该属性的类型与自身相同,却又不是常用数据类型,所以需要显式告诉YYModel将该属性对应的json字段解析为Clas类型的对象(好像不是必须的,属性为数组的情况下才是必须的),这时需要在Clas的实现文件中添加一个类方法:

+ (NSDictionary *)modelContainerPropertyGenericClass

指定parentsClass字段解析为Clas类型的对象。

IOS AFNetworking的使用与YYModel解析JSON数据(二)


ColorSize类:

IOS AFNetworking的使用与YYModel解析JSON数据(二)

IOS AFNetworking的使用与YYModel解析JSON数据(二)

MerchImage类:

IOS AFNetworking的使用与YYModel解析JSON数据(二)

IOS AFNetworking的使用与YYModel解析JSON数据(二)

MerchParameter类:

IOS AFNetworking的使用与YYModel解析JSON数据(二)

IOS AFNetworking的使用与YYModel解析JSON数据(二)

Merch类:

Merch类有些复杂,我在Merch.h中又声明了一个MerchList类,是因为返回的json最外层包含error_code,error_message,和data三个字段的数据,而真正Merch对象列表在data下的merchList字段下。

Merch类除了包含常用数据类型的属性和自定义的Clas类型的属性外,还包含三个数组类型的属性,所以必须要告诉YYModel数组类型的item解析为声明类型的对象。

IOS AFNetworking的使用与YYModel解析JSON数据(二)


Merch中添加一个类方法:

+ (NSDictionary *)modelContainerPropertyGenericClass

指定clas字段解析为Clas类型的对象;

指定colorSize数组的item解析为ColorSize类型的对象;

指定images数组的item解析为MerchImage类型的对象;

指定parameter数组的item解析为MerchParameter类型的对象。


IOS AFNetworking的使用与YYModel解析JSON数据(二)


  1. 仔细看下图,你会发现MerchList中的modelCustomPropertyMapper方法中属性-字段映射表的merchList与别的写法不一样。是因为merchList字段与error_code在不同级别,error_code与data字段同级,而merchList则是data下的一个字段,没错,YYModel还可以这样解析数据,是不是很方便?IOS AFNetworking的使用与YYModel解析JSON数据(二)

  2. MerchList中添加一个类方法:

    + (NSDictionary *)modelContainerPropertyGenericClas

    指定merchList数组的item解析为Merch类型的对象;


IOS AFNetworking的使用与YYModel解析JSON数据(二)


编写完所有Model之后就是测试了。我们将之前的测试post请求的方法改一改,将post请求完成获取的json数据使用yymodel解析成oc对象。

IOS AFNetworking的使用与YYModel解析JSON数据(二)

下断点调试查看解析是否成功:

IOS AFNetworking的使用与YYModel解析JSON数据(二)

IOS AFNetworking的使用与YYModel解析JSON数据(二)

IOS AFNetworking的使用与YYModel解析JSON数据(二)


完结。。。。。。


135编辑器



以上是关于IOS AFNetworking的使用与YYModel解析JSON数据的主要内容,如果未能解决你的问题,请参考以下文章

IOS AFNetworking的使用与YYModel解析JSON数据

iOS网络操作与AFNetworking

iOS开发之旅AFNetworking与SDWebImage下载图片

iOS网络访问之使用AFNetworking

AFNetworking 2.0 iOS 7 复制与 AFHTTPRequestOperation.h 文件中的区域警告

ios json 解析与 afnetworking