使用必备
- cocoapods下载
MJExtension
- 抓到的JSON包
- 插件 ESJsonFormat
实例
- 创建一个model类,
testModel
- 将抓到的JSON数据直接贴到插件ESJsonFormat中去,生成对应的类
-
输入
调用插件 - testModel中行程多态,不用另外再去创建多个
Model
-
- 将property中和关键字重复的属性改名。如
json
中的id
,在property
中要改为ID
-
通常我们做的转化,都是一个类中包含数组,数组又是另一个model组成的,例如:
说明
Model实例代码:.h
#import <Foundation/Foundation.h>
typedef enum {
SexMale,
SexFemale
} Sex;
@class MJUser;
@interface TestModel : NSObject
@property (strong, nonatomic) NSMutableArray *statuses;/** 存放着某一页微博数据(里面都是Status模型) */
@property (strong, nonatomic) NSArray *ads;/** 存放着一堆的广告数据(里面都是MJAd模型) */
@property (strong, nonatomic) NSNumber *totalNumber;/** 总数 */
@property (assign, nonatomic) long long previousCursor;/** 上一页的游标 */
@property (assign, nonatomic) long long nextCursor;/** 下一页的游标 */
@end
@interface MJStatus : NSObject
@property (copy, nonatomic) NSString *text;/** 微博文本内容 */
@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 字符串或字典,直接取出数据 ---
dict是一串JSON转好的字典
TestModel *model = [TestModel mj_objectWithKeyValues:dict];
- --- 当JSON的dict字段为关键字(如id)时的映射改变处理 ---
在TestModel.m中增加映射关系
+(NSDictionary *)mj_replacedKeyFromPropertyName{
return @{@"ID" : @"id",
@"desc" : @"desciption",
};
}
- --- property为NSArray时必须添加数组的映射 ---
//======================= .h中的声明 =======================
@interface TestModel : NSObject
@property (strong, nonatomic) NSMutableArray *statuses;/** 存放着某一页微博数据(里面都是Status模型) */
...
@end
//======================= .m中的声明 =======================
+(NSDictionary *)objectClassInArray{ //这种方式用插件已经可以直接生成
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内容为:
NSDictionary *dict = @{
@"name" : @"5分钟突破iOS开发",
@"publishedTime" : @"2011-09-10"
};
- publisher一定为空,且publishedTime的类型和JSON传过来的不符
- 在TestModel.m中增加映射关系
-(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;
}
网友评论