JSONModel是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model就可以很方便我们使用了。
pod 'JSONModel'
基本使用方式
例如这一json数据
{
"first" : 1,
"second": 2,
"third" : 3,
"fourth": 4
}
我们定义如下模型.m中可以不做任何处理
#import <JSONModel/JSONModel.h>
@interface OneModel : JSONModel
@property (nonatomic,assign)int first;
@property (nonatomic,assign)double second;
@property (nonatomic,assign)float third;
@property (nonatomic,copy)NSString* fourth;
@end
从json数据中我们可以看出,服务器给我们的数据类型都是一致的,而我们定义的数据模型中有int、double、float、NSString这4种,我们不需要做任何处理,JSONModel会帮我们自动转换。
JSONValueTransformer类中有如下支持的转换
NSMutableString <-> NSString
NSMutableArray <-> NSArray
NS(Mutable)Array <- JSONModelArray
NSMutableDictionary <-> NSDictionary
NSSet <-> NSArray
BOOL <-> number/string
string <-> number
string <-> url
string <-> time zone
string <-> date
number <-> date
使用JSONModel时,不需要额外去检查所要的服务器属性是否有返回。JSONModel的initWithDictionary方法会自动去进行检查并处理。
有效性检查,如果指定的服务器返回的某个字段没有返回,而且又是必须的, 像下面这样写,则会抛出异常。
//this property is required
@property (nonatomic,copy) NSString* fourth;
因为默认这个值是必须的。
一般情况下,我们不想因为服务器的某个值没有返回(nil)就使程序崩溃, 我们会加关键字Optional。像这样
@property (nonatomic,copy) NSString<Optional>* fourth;
如果不想每一条属性都添加,我们也可以在.m文件中重写方法
+(BOOL)propertyIsOptional:(NSString *)propertyName{
return YES;
}
使用如下方法给model赋值
//假设responseObject[@"data"]是服务器返回给我们的数据
OneModel *model = [[OneModel alloc]initWithDictionary:responseObject[@"data"] error:nil];
对获得的model我们可以通过如下方法把它转成字典
-(NSDictionary*)toDictionary;
模型嵌套
#import <JSONModel/JSONModel.h>
#import "TwoModel.h"
@interface OneModel : JSONModel
@property (nonatomic,assign)int first;
@property (nonatomic,assign)double second;
@property (nonatomic,assign)float third;
@property (nonatomic,copy)NSString* fourth;
@property (nonatomic,strong)TwoModel* twoModel;
@end
模型结合
#import <JSONModel/JSONModel.h>
@protocol OneModel//注意要加上这句
@end
@interface OneModel : JSONModel
@property (nonatomic,assign)int first;
@property (nonatomic,assign)double second;
@property (nonatomic,assign)float third;
@property (nonatomic,copy)NSString<Optional>* fourth;
@end
@interface ThreeModel : JSONModel
@property (nonatomic,assign)NSString<Optional>* id;
@property (nonatomic,strong)NSArray<OneModel,Optional>* one;
@end
#import "OneModel.h"
@implementation OneModel
@end
@implementation ThreeModel
@end
在此附上他人更详尽的讲解