IOS自动化解析JSON 详细步骤

IOS自动化解析JSON 详细步骤

做了IOS研发也有两年的时间了。对于JSON转模型这种基本工作,实在懒得浪费时间去解析。复杂的模型,一个个的添加属性,数组套字典,字典套字典,再加上一个字典几十个属性。模型建好,也就半天的时间过去了。

*******重点提示*************

对于一年以内的IOS开发人员,还是建议手工解析JSON,可以加强对json的理解,以及结构的理解。推荐使用JSONModel。纯手工解析,需要你对于每层结构都十分了解,才能解出JSON

JSONModel可参考

*********************************

对于已经很熟悉的工程师,推荐使用自动化工具解析,半天的工作量,1秒完成,0错误。高效迅速,

先介绍2个插件工具。

1.快速json转模型,自动生成.h .m文件 。脱离插件直接在MAC上运行的~

2.标准化输出json,打断点,直接可以从控制台拿到标准json格式,无需管后台要json了。只要有接口,就可以无脑取json。文件放到demo中,直接拉到工程中就可以使用

www.zeeklog.com  - IOS自动化解析JSON 详细步骤

使用流程:

1.网络层断点,nslog输出json到控制台。注意要输出标准化json

+ (id)getTopNews:(NSInteger)page completionHandler:(void (^)(MJRootClass *, NSError *))completionHandler{
    NSString *path = [NSString stringWithFormat:@"http://box.dwstatic.com/apiNewsList.php?action=l&newsTag=headlineNews&p=%ld&v=202&OSType=iOS10.0.1&versionName=3.4.0", page];
    return [self get:path completionHandler:^(id obj, NSError *error) {
        NSLog(@"%@",obj);
        //使用YYModel自动化解析,需要区分数组,字典,写一个parse的分类
        //!completionHandler ?: completionHandler([ESRootClass parse:obj], error);
        //MJextension 通过Pod配置 对于首层是数组的情况 也可以仿照上面写一个parse类。基本用不上后台返回数据首层肯定是字典
        !completionHandler ?: completionHandler([MJRootClass mj_objectWithKeyValues:obj], error);
    }];
}

2.打开esjsonFormac,将标准化json输入到指定区域,开始点击start,生成模型。如图visualJson显示,当前json共两层,所以需要给两个model的名字,一个首层的,一个数组中的Model名字。

www.zeeklog.com  - IOS自动化解析JSON 详细步骤
www.zeeklog.com  - IOS自动化解析JSON 详细步骤
www.zeeklog.com  - IOS自动化解析JSON 详细步骤

3.完成以后自动生成两个文件,一个.h一个.m。将模型类,拖入工程文件当中,这个插件支持MJextension以及YYmodel,除了自动生成模型中的属性,还会自动生成MJ或YY需要的类方法,比如数组对应字典时候的映射。都会自动生成

www.zeeklog.com  - IOS自动化解析JSON 详细步骤

例如这样的方法,具体参考demo源码

#import "MJRootClass.h"
@implementation MJRootClass

+ (NSDictionary *)objectClassInArray{
    return @{@"data" : [MJData class]};
}

@end

@implementation MJData

@end

4.在你需要转换模型的地方,使用对应的方法。本人DEMO中写了MJ的转换方法以及YYMODEL的转换方法。大家可以根据需要自行选择。本demo以一个新闻类的tableview为例子。转换模型方法,写在netManager中。

+ (id)getTopNews:(NSInteger)page completionHandler:(void (^)(MJRootClass *, NSError *))completionHandler{
    NSString *path = [NSString stringWithFormat:@"http://box.dwstatic.com/apiNewsList.php?action=l&newsTag=headlineNews&p=%ld&v=202&OSType=iOS10.0.1&versionName=3.4.0", page];
    return [self get:path completionHandler:^(id obj, NSError *error) {
        NSLog(@"%@",obj);
        //使用YYModel自动化解析,需要区分数组,字典,写一个parse的分类
        //!completionHandler ?: completionHandler([ESRootClass parse:obj], error);
        //MJextension 通过Pod配置 对于首层是数组的情况 也可以仿照上面写一个parse类。基本用不上后台返回数据首层肯定是字典
        !completionHandler ?: completionHandler([MJRootClass mj_objectWithKeyValues:obj], error);
    }];
}

到这步模型转换完成并且通过block回调到controller中。

5.最后一步,拿到回调的模型,对页面进行赋值

    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [NetManager getTopNews:1034 completionHandler:^(MJRootClass *model, NSError *error) {
            [self.tableView.mj_header endRefreshing];
            if (!error) {
                self.top = model;
                
                [self.dataList removeAllObjects];
                [self.dataList addObjectsFromArray:model.data];
                
                [self.tableView reloadData];
                if (self.top.totalPage == self.top.pageNum) {
                    [self.tableView.mj_footer endRefreshingWithNoMoreData];
                }else{
                    [self.tableView.mj_footer resetNoMoreData];
                }
            }
        }];
    }];

6.最终展示效果,亲测MJ的自动生成模型+转换,以及YYModel的自动模型+转换,都可以正常使用~

www.zeeklog.com  - IOS自动化解析JSON 详细步骤

源码下载地址--本人github:

关于源码demo报错问题,按照下图重新配置pch的相对路径即可~

www.zeeklog.com  - IOS自动化解析JSON 详细步骤
www.zeeklog.com  - IOS自动化解析JSON 详细步骤