使用必備
- cocoapods下載
MJExtension
- 抓到的JSON包
- 插件 ESJsonFormat
實例
- 創(chuàng)建一個model類,
testModel
- 將抓到的JSON數(shù)據(jù)直接貼到插件ESJsonFormat中去,生成對應(yīng)的類
-
輸入
調(diào)用插件 - testModel中行程多態(tài),不用另外再去創(chuàng)建多個
Model
-
- 將property中和關(guān)鍵字重復(fù)的屬性改名。如
json
中的id
,在property
中要改為ID
-
通常我們做的轉(zhuǎn)化,都是一個類中包含數(shù)組,數(shù)組又是另一個model組成的,例如:
說明
Model實例代碼:.h
#import <Foundation/Foundation.h>
typedef enum {
SexMale,
SexFemale
} Sex;
@class MJUser;
@interface TestModel : NSObject
@property (strong, nonatomic) NSMutableArray *statuses;/** 存放著某一頁微博數(shù)據(jù)(里面都是Status模型) */
@property (strong, nonatomic) NSArray *ads;/** 存放著一堆的廣告數(shù)據(jù)(里面都是MJAd模型) */
@property (strong, nonatomic) NSNumber *totalNumber;/** 總數(shù) */
@property (assign, nonatomic) long long previousCursor;/** 上一頁的游標(biāo) */
@property (assign, nonatomic) long long nextCursor;/** 下一頁的游標(biāo) */
@end
@interface MJStatus : NSObject
@property (copy, nonatomic) NSString *text;/** 微博文本內(nèi)容 */
@property (strong, nonatomic) MJUser *user;/** 微博作者 */
@end
@interface MJUser : NSObject
@property (copy, nonatomic) NSString *name;/** 名稱 */
@property (copy, nonatomic) NSString *ID;/** 頭像 */
@property (assign, nonatomic) unsigned int age;/** 年齡 */
@property (strong, nonatomic) NSNumber *height;/** 身高 */
@property (strong, nonatomic) NSDecimalNumber *money;/** 財富 */
@property (assign, nonatomic) Sex sex;/** 性別 */
@property (assign, nonatomic, getter=isGay) BOOL gay;/** 同性戀 */
@end
@interface MJAd : NSObject
@property (copy, nonatomic) NSString *image;/** 廣告圖片 */
@property (strong, nonatomic) NSURL *url;/** 廣告url */
@end
Model.m
#import "TestModel.h"
#import "MJExtension.h"
@implementation TestModel
//+ (NSDictionary *)mj_objectClassInArray
//{
// return @{
// @"statuses" : @"MJStatus",
// @"ads" : @"MJAd"
// };
//}
+ (NSDictionary *)objectClassInArray{
return @{@"statuses" : [MJStatus class],
@"ads" : [MJAd class]};
}
+ (NSDictionary *)mj_replacedKeyFromPropertyName {
return @{@"ID" : @"id"
};
}
@end
@implementation MJStatus
@end
@implementation MJUser
@end
@implementation MJAd
@end
MJExtension 幾種方法使用說明
-
--- 傳入JSON 字符串或字典,直接取出數(shù)據(jù) ---
dict是一串JSON轉(zhuǎn)好的字典
TestModel *model = [TestModel mj_objectWithKeyValues:dict];
- --- 當(dāng)JSON的dict字段為關(guān)鍵字(如id)時的映射改變處理 ---
在TestModel.m中增加映射關(guān)系
+(NSDictionary *)mj_replacedKeyFromPropertyName{
return @{@"ID" : @"id",
@"desc" : @"desciption",
};
}
- --- property為NSArray時必須添加數(shù)組的映射 ---
//======================= .h中的聲明 =======================
@interface TestModel : NSObject
@property (strong, nonatomic) NSMutableArray *statuses;/** 存放著某一頁微博數(shù)據(jù)(里面都是Status模型) */
...
@end
//======================= .m中的聲明 =======================
+(NSDictionary *)objectClassInArray{ //這種方式用插件已經(jīng)可以直接生成
return @{@"statuses" : [MJStatus class],
@"ads" : [MJAd class]};
}
// 或者寫成
+(NSDictionary *)mj_objectClassInArray {
return @{
@"statuses" : @"MJStatus",
};
}
- --- 過濾字典的值(比如字符串日期處理為NSDate、字符串nil處理為@"" ---
例如一個類MJBook為
@interface MJBook : NSObject
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *publisher;
@property (strong, nonatomic) NSDate *publishedTime;
@property (strong, nonatomic) MJBox *box;
@end
JSON內(nèi)容為:
NSDictionary *dict = @{
@"name" : @"5分鐘突破iOS開發(fā)",
@"publishedTime" : @"2011-09-10"
};
- publisher一定為空,且publishedTime的類型和JSON傳過來的不符
- 在TestModel.m中增加映射關(guān)系
-(id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property {
if ([property.name isEqualToString:@"publisher"]) { // 過濾掉空的屬性值
if (oldValue == nil) return @"";
} else if (property.type.typeClass == [NSDate class]) {
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
return [fmt dateFromString:oldValue];
}
return oldValue;
}