JSONModel是json轉(zhuǎn)model的第三方開源庫。當(dāng)我們向服務(wù)器發(fā)送一個(gè)請求之后,通過JSONModel把數(shù)據(jù)轉(zhuǎn)成model就可以很方便我們使用了。
pod 'JSONModel'
基本使用方式
例如這一json數(shù)據(jù)
{
"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數(shù)據(jù)中我們可以看出,服務(wù)器給我們的數(shù)據(jù)類型都是一致的,而我們定義的數(shù)據(jù)模型中有int、double、float、NSString這4種,我們不需要做任何處理,JSONModel會(huì)幫我們自動(dòng)轉(zhuǎn)換。
JSONValueTransformer類中有如下支持的轉(zhuǎn)換
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時(shí),不需要額外去檢查所要的服務(wù)器屬性是否有返回。JSONModel的initWithDictionary方法會(huì)自動(dòng)去進(jìn)行檢查并處理。
有效性檢查,如果指定的服務(wù)器返回的某個(gè)字段沒有返回,而且又是必須的, 像下面這樣寫,則會(huì)拋出異常。
//this property is required
@property (nonatomic,copy) NSString* fourth;
因?yàn)槟J(rèn)這個(gè)值是必須的。
一般情況下,我們不想因?yàn)榉?wù)器的某個(gè)值沒有返回(nil)就使程序崩潰, 我們會(huì)加關(guān)鍵字Optional。像這樣
@property (nonatomic,copy) NSString<Optional>* fourth;
如果不想每一條屬性都添加,我們也可以在.m文件中重寫方法
+(BOOL)propertyIsOptional:(NSString *)propertyName{
return YES;
}
使用如下方法給model賦值
//假設(shè)responseObject[@"data"]是服務(wù)器返回給我們的數(shù)據(jù)
OneModel *model = [[OneModel alloc]initWithDictionary:responseObject[@"data"] error:nil];
對獲得的model我們可以通過如下方法把它轉(zhuǎn)成字典
-(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
模型結(jié)合
#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
在此附上他人更詳盡的講解