美文网首页
使用OC进行Json解析--JsonModel

使用OC进行Json解析--JsonModel

作者: 本帅不良 | 来源:发表于2018-07-18 10:24 被阅读74次

    直入主题,如何解析复杂的Json数据?所谓的复杂的Json数据是指三层及以上的带数组的嵌套模型。如下展示的是一个较复杂的Json字符串--最外层是一个字典,字典里面有一个数组,数组里面是一个字典,字典里面是第二层数组,这第二层数组里面还有一个字典。

    {"code":1,"msg":"获取数据成功","data":[{"content":[{"content":[{"id":1,"identity_label":"施工员1","style":"","icon":""},{"id":2,"identity_label":"施工员2","style":"","icon":""}],"name":"管理人员","labels_class":1},{"content":[{"id":3,"identity_label":"水泥工","style":"","icon":""},{"id":4,"identity_label":"木工","style":"","icon":""}],"name":"技术工人","labels_class":2},{"content":[{"id":5,"identity_label":"泥工班组","style":"","icon":""},{"id":6,"identity_label":"木工班组","style":"","icon":""}],"name":"施工班组","labels_class":3}],"labels_type":1,"labels_name":"工人"},{"content":[{"content":[{"id":7,"identity_label":"60小型挖机","style":"","icon":""},{"id":8,"identity_label":"起重机","style":"","icon":""},{"id":9,"identity_label":"挖土机","style":"","icon":""}],"name":"机械设备","labels_class":4}],"labels_type":2,"labels_name":"机械"},{"content":[{"content":[{"id":10,"identity_label":"水泥","style":"","icon":""},{"id":11,"identity_label":"钢筋","style":"","icon":""},{"id":12,"identity_label":"沙子","style":"","icon":""}],"name":"材料","labels_class":5}],"labels_type":3,"labels_name":"材料商"},{"content":[{"content":[{"id":13,"identity_label":"土建","style":"","icon":""},{"id":14,"identity_label":"市政","style":"","icon":""},{"id":15,"identity_label":"幕墙门窗","style":"","icon":""}],"name":"专业分包","labels_class":6}],"labels_type":4,"labels_name":"包工"},{"content":[{"content":[{"id":16,"identity_label":"房建工程","style":"","icon":""},{"id":17,"identity_label":"装饰工程","style":"","icon":""},{"id":18,"identity_label":"道路工程","style":"","icon":""}],"name":"工程项目","labels_class":7}],"labels_type":5,"labels_name":"项目"}]}
    

    1、首先看最外层的字典,有三个键:code、msg、data,分别对应数字类型、字符串类型、数组类型,数字类型可以用NSInteger、CGFloat、NSNumber来接收(注:如果数字类型的关键字是id,不要使用NSNumber接收),字符串就用NSString接收,具体操作如下:

    @property (nonatomic) NSNumber *code;
    @property (nonatomic) NSString *msg;
    
    //接收关键字为id的数字类型
    @property (nonatomic) NSInteger id;
    

    重点讲一下接收数组类型,先上代码

    #import "BaseModel.h"//继承自BaseModel
    #import "IDTagClassModel.h"//引用数组中模型
    //声明一个协议,注意这个协议是必须要的,不然没办法嵌套
    @protocol IDTagClassModel <NSObject>
    @end
    
    @interface IDTagRootModel : BaseModel
    //与协议相互配合,就知道了数组里面放的是一个模型了
    @property (nonatomic) NSArray<IDTagClassModel> *data;
    @property (nonatomic) NSNumber *code;
    @property (nonatomic) NSString *msg;
    
    @end
    

    接下来的操作就是重复上述过程了。

    将数据模型建立好之后,就是解析了:

    NSError *error;
    //当最外层是数组时:
    NSArray *arr = [IDTagRootModel arrayOfModelsFromData:data error:&error];
    //当最外层是字典的时候:
    IDTagDetailModel *model = [IDTagDetailModel dictionaryOfModelsFromDictionary:dic error:error];
    
    if (!error) {
        //解析成功
     }
    

    平时最常用的就是数组转模型了,当然还有data转模型、模型转data,主要用于模型的存储。

    相关文章

      网友评论

          本文标题:使用OC进行Json解析--JsonModel

          本文链接:https://www.haomeiwen.com/subject/nconpftx.html