首先定义一个类,继承JSONModel //这个类JuBaModel做为模型的基类,之后创建模型都继承JuBaModel(这个类名是以个人项目名为前缀,读者能够本身定义) #import <Foundation/Foundation.h> #import "JSONModel.h" @interface JuBaModel : JSONModel @end #import "JuBaModel.h" @implementation JuBaModel /*这是JSONModel的方法 目的是把 _ 方式命名的转换为Camel命名方法 由于服务器端的命名方式单词以 _ 隔开, 而OC得命名方式为Camel命名法 例如: JSON中是hello_word 而模型中应该定义 helloWord (才能够自动匹配上) */ +(JSONKeyMapper *)keyMapper{ return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase]; } /*这里保证了JSON里的属性是可选择的 也就是Model中属性多了,少了都无所谓 当用字典给模型赋值时,JSONModel总能找到一一对应得关系 例如: JSON中 有键 hell0_word username password 而 模型中 只有 username password 那么自动赋值时,就自会把username password对应的键赋值,而这种状况没法采用KVC。 */ +(BOOL)propertyIsOptional:(NSString *)propertyName{ return YES; } @end
定义一个MOdel,继承上面自定义的类(不用定义字典转模型的函数了,由于JSONModel中已经帮咱们定义该函数) //宏定义 取代@property #define kStr(name) @property(nonatomic, copy) NSString *name #define kDou(name) @property(nonatomic, assign) double name #import "JuBaModel.h" @interface UserModel : JuBaModel /*命名方式: OC/Java 是遵循Camel命名法 在PHP, Linux 里 都是按照 _ 隔开 全是小写命名*/ kStr(username); kStr(password); kStr(address); kStr(birthday); kStr(clientType); /* 和 client_type 相对应*/ kStr(createTime); kStr(deviceModel); kStr(deviceToken); kStr(headerImg); kStr(id); kStr(ip); kStr(lastLoginTime); kDou(lbsLat); kDou(lbsLong); kStr(nickname); kStr(osVersion); kStr(sex); kStr(token); #import "UserModel.h" @implementation UserModel @end
控制器中须要用到该模型时,只须要 //使用JSONMedol NSDictionary *dict = [obj objectForKey:@"data"];//“data”是我解析JSON中的一个键,它里面是字典 UserModel *user = [[UserModel alloc]initWithDictionary:dict error:nil];