美文网首页
iOS - JSONModel的基本使用(OC)

iOS - JSONModel的基本使用(OC)

作者: 刘_小_二 | 来源:发表于2020-09-02 09:27 被阅读0次

    1.MJExterntion用法之在模型中包含数组模型

    需要重写类函数mj_objectClassInArray,说明对应的某个Array属性里是什么类对象。

    //改变字典的key对应的属性名
    +(NSDictionary *)mj_replacedKeyFromPropertyName{
        return @{@"fId":@"id"};
    }
    
    //说明数组中包含的模型是什么类,OaHandleModel是类,handleLogList是模型中的某个属性名。
    + (NSDictionary *)mj_objectClassInArray{
        return @{@"handleLogList":@"OaHandleModel"};
    }
    

    2.JSONModel基本使用

    1.基于名称的自动映射

    {
        "id": 123,
        "name": "Product name",
        "price": 12.95
    }
    
    @interface ProductModel : JSONModel
    @property (nonatomic) NSInteger id;
    @property (nonatomic) NSString *name;
    @property (nonatomic) float price;
    @end
    

    2. 模型级联(模型包括其他模型)

    {
        "orderId": 104,
        "totalPrice": 13.45,
        "product": {
            "id": 123,
            "name": "Product name",
            "price": 12.95
        }
    }
    
    @interface ProductModel : JSONModel
    @property (nonatomic) NSInteger id;
    @property (nonatomic) NSString *name;
    @property (nonatomic) float price;
    @end
    
    @interface OrderModel : JSONModel
    @property (nonatomic) NSInteger orderId;
    @property (nonatomic) float totalPrice;
    @property (nonatomic) ProductModel *product;
    @end
    

    3.模型集合

    {
        "orderId": 104,
        "totalPrice": 103.45,
        "products": [
            {
                "id": 123,
                "name": "Product #1",
                "price": 12.95
            },
            {
                "id": 137,
                "name": "Product #2",
                "price": 82.95
            }
        ]
    }
    
    @protocol ProductModel;
    
    @interface ProductModel : JSONModel
    @property (nonatomic) NSInteger id;
    @property (nonatomic) NSString *name;
    @property (nonatomic) float price;
    @end
    
    @interface OrderModel : JSONModel
    @property (nonatomic) NSInteger orderId;
    @property (nonatomic) float totalPrice;
    @property (nonatomic) NSArray <ProductModel> *products;
    @end
    

    或者

    @interface OrderModel : JSONModel
    @property (nonatomic) NSInteger orderId;
    @property (nonatomic) float totalPrice;
    @property (nonatomic) NSArray<ProductModel *> <ProductModel> *products;
    @end
    

    4.嵌套键映射

    {
        "orderId": 104,
        "orderDetails": {
            "name": "Product #1",
            "price": {
                "usd": 12.95
            }
        }
    }
    
    @interface OrderModel : JSONModel
    @property (nonatomic) NSInteger id;
    @property (nonatomic) NSString *productName;
    @property (nonatomic) float price;
    @end
    
    @implementation OrderModel
    
    + (JSONKeyMapper *)keyMapper
    {
        return [[JSONKeyMapper alloc] initWithModelToJSONDictionary:@{
            @"id": @"orderId",
            @"productName": @"orderDetails.name",
            @"price": @"orderDetails.price.usd"
        }];
    }
    
    @end
    

    5. 字段中带下划线

    {
        "order_id": 104,
        "order_product": "Product #1",
        "order_price": 12.95
    }
    
    @interface OrderModel : JSONModel
    @property (nonatomic) NSInteger orderId;
    @property (nonatomic) NSString *orderProduct;
    @property (nonatomic) float orderPrice;
    @end
    
    @implementation OrderModel
    
    + (JSONKeyMapper *)keyMapper
    {
        return [JSONKeyMapper mapperForSnakeCase];
    }
    
    @end
    

    6.可选属性(即可以缺失或为空)

    {
        "id": 123,
        "name": null,
        "price": 12.95
    }
    
    @interface ProductModel : JSONModel
    @property (nonatomic) NSInteger id;
    @property (nonatomic) NSString <Optional> *name;
    @property (nonatomic) float price;
    @property (nonatomic) NSNumber <Optional> *uuid;
    @end
    

    7.忽略的属性(即JSONModel完全忽略它们)

    {
        "id": 123,
        "name": null
    }
    
    @interface ProductModel : JSONModel
    @property (nonatomic) NSInteger id;
    @property (nonatomic) NSString <Ignore> *customProperty;
    @end
    

    8.标量类型可选

    {
        "id": null
    }
    
    @interface ProductModel : JSONModel
    @property (nonatomic) NSInteger id;
    @end
    
    @implementation ProductModel
    
    + (BOOL)propertyIsOptional:(NSString *)propertyName
    {
        if ([propertyName isEqualToString:@"id"])
            return YES;
    
        return NO;
    }
    
    @end
    

    9. 将模型导出为NSDictionary或JSON

    ProductModel *pm = [ProductModel new];
    pm.name = @"Some Name";
    
    // convert to dictionary
    NSDictionary *dict = [pm toDictionary];
    
    // convert to json
    NSString *string = [pm toJSONString];
    

    相关文章

      网友评论

          本文标题:iOS - JSONModel的基本使用(OC)

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