MJExtension简单介绍及使用

MJExtension是一套字典和模型之间互相转换的超轻量级框架

1、字典(JSON) --> 模型(Model)、CoreData模型(Core Data Model)
2、JSON字符串 --> 模型(Model)、CoreData模型(Core Data Model)
3、字典数组(JSON Array) --> 模型数组(Model Array)、Core Data模型数组(Core Data Model Array)
4、JSON字符串 --> 模型数组(Model Array)、Core Data模型数组(Core Data Model Array)
5、模型(Model)、CoreData模型(Core Data Model) --> 字典(JSON)
6、模型数组(Model Array)、Core Data模型数组(Core Data Model Array) --> 字典数组(JSON Array)
7、只需要一行代码,就能实现模型的所有属性进行Coding(归档和解档)

1 2 3 4 5 6是字典与模型之间的相互转换。7是模型属性的归档和解档。
1 2 3 4是JSON格式转换成模型,通常我们用于网络获取数据后,进行数据解析使用。
5 6 为模型转换成JSON格式,上传数据会用到。
7 一句话将所有的子文件全部归档反归档(MJExtension) ,所有Model都会用到,所以写在基类就好。

MJCodingImplementation

一、常用方法——Model中

1.1
+ (void)mj_setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray
该方法在model中用于说明 数组属性,该属性数组中存放那种类型的model,写在init方法内部

- (instancetype)init
{
self = [super init];
if (self) {
// ZYXStatusResult类中的两个数组中存放的是哪两个模型
[ZYXStatusResult mj_setupObjectClassInArray:^NSDictionary *{
return @{
@"statuses" : @"ZYXStatus", // @"statuses" : [ZYXStatus class],
@"ads" : @"ZYXAd" // @"ads" : [ZYXAd class]
};
}];
}
return self;
}

1.2

      + (void)mj_setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName

该方法在model中用于处理属性名和JSON中key值不同的情况,将属性名和key进行对应并替换。写在init方法内部

  • (instancetype)init
    {
    self = [super init];
    if (self) {
    [ZYXStudent mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
    return @{
    @"ID" : @"id",
    @"desc" : @"desciption",
    @"oldName" : @"name.oldName",
    @"nowName" : @"name.newName",
    @"info":@"name.info",
    @"nameChangedTime" : @"name.info[1].nameChangedTime",
    @"bag" : @"other.bag"
    };
    }];
    }
    return self;
    }

二、常用方法——将JSON格式转Model

2.1
+ (instancetype)mj_objectWithKeyValues:(id)keyValues
字典转模型,复合字典转模型,嵌套(数组)字典转模型 JSON字符串转模型都会用到这个方法。以下仅仅是一个事例,本Demo可以通过文字末尾链接查看。


// 3、多层字典嵌套转成嵌套模型
-(void)DictionaryTransferToMultiModel{
NSDictionary *dict = @{
@"text" : @"是啊,今天天气确实不错!",
@"user" : @{
@"name" : @"Jack",
@"icon" : @"lufy.png"
},
@"retweetedStatus" : @{
@"text" : @"今天天气真不错!",
@"user" : @{
@"name" : @"Rose",
@"icon" : @"nami.png"
}
}
};
// 将字典转为Status模型
ZYXStatus *status = [ZYXStatus mj_objectWithKeyValues:dict];
NSLog(@"text=%@, name=%@, icon=%@", status.text, status.user.name, status.user.icon);
// text=是啊,今天天气确实不错!, name=Jack, icon=lufy.png

// NSLog(@"text2=%@, name2=%@, icon2=%@", status.retweetedStatus.text, status.retweetedStatus.user.name, status.retweetedStatus.user.icon);
// text2=今天天气真不错!, name2=Rose, icon2=nami.png
}


2.2
+ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
JSON数组转成模型数组。这个也是非常常用的。

-(void)JSONarrayTransferToModelarray{
NSArray *dictArray = @[
@{
@"name" : @"Jack",
@"icon" : @"lufy.png"
},
@{
@"name" : @"Rose",
@"icon" : @"nami.png"
}
];

// JSON array -> User array
NSArray *userArray = [ZYXUser mj_objectArrayWithKeyValuesArray:dictArray];

// Printing
for (ZYXUser *user in userArray) {
    NSLog(@"name=%@, icon=%@", user.name, user.icon);
}
// name=Jack, icon=lufy.png
// name=Rose, icon=nami.png
ZYXUser *user = userArray[0];
NSLog(@"user.name=%@",user.name);
// user.name=Jack

}

三、常用方法——将Model转JSON

3.1
- (NSMutableDictionary *)mj_keyValues


-(void)ModelTransferToJSONDictionary{
ZYXUser *user = [[ZYXUser alloc] init];
user.name = @"Jack";
user.icon = @"lufy.png";

ZYXStatus *status = [[ZYXStatus alloc] init];
status.user = user;
status.text = @"Nice mood!";

// Status -> JSON
NSDictionary *statusDict = status.mj_keyValues;
NSLog(@"%@", statusDict);

/*
 2017-02-09 10:50:03.372 MJExtensionDemo[866:219284] {
    text = "Nice mood!";
    user =     {
         age = 0;
         gay = 0;
         icon = "lufy.png";
         name = Jack;
         sex = 0;
    };
 }

 */

// More complex situation
ZYXStudent *stu = [[ZYXStudent alloc] init];
stu.ID = @"123";
stu.oldName = @"rose";
stu.nowName = @"jack";
stu.desc = @"handsome";
stu.nameChangedTime = @"2018-09-08";

ZYXBag *bag = [[ZYXBag alloc] init];
bag.name = @"a red bag";
bag.price = 205;
stu.bag = bag;

NSDictionary *stuDict = stu.mj_keyValues;
NSLog(@"%@", stuDict);
/*
 {
     ID = 123;
     bag =     {
          name = "\U5c0f\U4e66\U5305";
          price = 205;
     };
     desc = handsome;
     nameChangedTime = "2018-09-08";
     nowName = jack;
    oldName = rose;
 }
 */

}

3.2
+ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray

 // 1.新建模型数组
MJUser *user1 = [[MJUser alloc] init];
user1.name = @"Jack";
user1.icon = @"lufy.png";

MJUser *user2 = [[MJUser alloc] init];
user2.name = @"Rose";
user2.icon = @"nami.png";

NSArray *userArray = @[user1, user2];

// 2.将模型数组转为字典数组
NSArray *dictArray = [MJUser mj_keyValuesArrayWithObjectArray:userArray];
MJExtensionLog(@"%@", dictArray);

简单使用小Demo:
https://github.com/zhangyanxiao/MJExtensionDemo
MJ:
https://github.com/CoderMJLee/MJExtension

你可能感兴趣的:(MJExtension简单介绍及使用)