简介——什么是JSONModel
首先我们要了解JSONModel并学会如何使用JSONModel我们就必须要知道JSONModel到底是什么:JSONModel是快速方便的把JSON数据转化为ObjectiveC的数据类型,是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model中的属性就可以很方便的供给我们使用了。
使用方法
首先我们知道JSONModel是第三方开源库,我们要用第三方库的话就先添加一个第三库,如何添加第三方库具体看这篇:iOS安装CocoaPods详细过程
JSON转化为模型
{ "country": "Germany",
"dialCode": 49,
"isInEurope": true
}
#import "JSONModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface CountryModel : JSONModel
@property (nonatomic, copy) NSString *country;
@property (nonatomic, copy) NSString *dialCode;
@property (nonatomic, assign) BOOL isInEurope;
@end
NS_ASSUME_NONNULL_END
NSError *error;
CountryModel *countryModel = [[CountryModel alloc] initWithDictionary:dic error:&error];
模型转化为字典
NSDictionary *dict = [countryModel toDictionary];
模型转化为字符串
NSString *string = [countryModel toJSONString];
嵌套模型的数据解析
我们知道在发送网络请求后会出现模型套模型的情况,那这时我们应该如何去解析数据呢,简单的来说我们可以对每一个要嵌套的都写成一个类,但这并不是说要写成多个类文件,而是将所有的写到一个类文件中。比如:
"orderId": 104,
"totalPrice": 13.45,
"product": {
"id": 123,
"name": "Product name",
"price": 12.95
}
#import "JSONModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface ProductModel : JSONModel
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *id;
@property (nonatomic, assign) float price;
@end
@interface OtherModel : JSONModel
@property (nonatomic, assign) NSInteger orderId;
@property (nonatomic, assign) float totalPrice;
@property (nonatomic, strong) ProductModel *product;
@end
NS_ASSUME_NONNULL_END
#import "ProductModel.h"
@implementation ProductModel
@end
@implementation OtherModel
@end
NSDictionary *dic = @{
@"orderId": @(104),
@"totalPrice": @(13.45),
@"product": @{
@"id": @(123),
@"name": @"Product name",
@"price": @(12.95)
}
};
NSError *error;
OtherModel *model = [[OtherModel alloc] initWithDictionary:dic error:&error];
可选属性 (就是说这个属性可以为null或者为空)
{
"id": "123",
"name": null,
"price": 12.95
}
@interface ProductModel : JSONModel
@property (nonatomic, copy) NSString <Optional>*name;
@property (nonatomic, copy) NSString *id;
@property (nonatomic, assign) float price;
@property (strong, nonatomic) NSNumber<Optional>* uuid;
@end
NSDictionary *dic = @{
@"id": @"123",
@"name": [NSNull null],
@"price": @(12.95)
};
NSError *error;
ProductModel *model = [[ProductModel alloc] initWithDictionary:dic error:&error];
设置所有的属性为可选(所有属性值可以为空)
@implementation ProductModel
+(BOOL)propertyIsOptional:(NSString*)propertyName
{
return YES;
}
@end
- Model 的所有属性值可以为空;
- . 防止由于服务器数据返回空导致JSONModel异常(程序崩溃)
- 官方建议尽量避免使用该方法(即使要全部属性为可选,也尽量是在每个属性那里标注为Optional);
设置下划线自动转驼峰
{
"order_id": 104,
"order_product" : @"Product#1",
"order_price" : 12.95
}
#import "JSONModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface OrderModel : JSONModel
@property (assign, nonatomic) int orderId;
@property (assign, nonatomic) float orderPrice;
@property (strong, nonatomic) NSString* orderProduct;
@end
NS_ASSUME_NONNULL_END
+(JSONKeyMapper*)keyMapper
{
return [JSONKeyMapper mapperForSnakeCase];
}
NSDictionary *dic = @{
@"order_id": @(104),
@"order_product" : @"Product#1",
@"order_price" : @(12.95)
};
NSError *error;
OrderModel *model = [[OrderModel alloc] initWithDictionary:dic error:&error];
|