首先定義一個類,繼承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];