MJExtension簡介及使用

一, 簡介

1.MJExtension是一套字典和模型之間互相轉換的超輕量級框架,支持以下類型轉換:

  • JSON –> Model、Core Data Model
  • JSONString –> Model刻伊、Core Data Model
  • Model捶箱、Core Data Model –> JSON
  • JSON Array –> Model Array丁屎、Core Data Model Array
  • JSONString –> Model Array晨川、Core Data Model Array
  • Model Array共虑、Core Data Model Array –> JSON Array
  • Coding all properties of model in one line code.

二, 如何使用

cocoapods導入:pod 'MJExtension'

三,常用 API 說明

示例中相關類.h

typedef enum {
SexMale,
SexFemale
} Sex;
@interface User : NSObject
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *icon;
@property (assign, nonatomic) unsigned int age;
@property (copy, nonatomic) NSString *height;
@property (strong, nonatomic) NSNumber *money;
@property (assign, nonatomic) Sex sex;
@property (assign, nonatomic, getter=isGay) BOOL gay;
@end
@interface Status : NSObject
@property (copy, nonatomic) NSString *text;
@property (strong, nonatomic) User *user;
@end

@interface Ad : NSObject
@property (copy, nonatomic) NSString *image;
@property (copy, nonatomic) NSString *url;
@end
@interface StatusResult : NSObject
/** Contatins Status model */
@property (strong, nonatomic) NSMutableArray *statuses;
/** Contatins Ad model */
@property (strong, nonatomic) NSArray *ads;
@property (strong, nonatomic) NSNumber *totalNumber;
@end
@interface Bag : NSObject
@property (copy, nonatomic) NSString *name;
@property (assign, nonatomic) double price;
@end
@interface Student : NSObject
@property (copy, nonatomic) NSString *ID;
@property (copy, nonatomic) NSString *desc;
@property (copy, nonatomic) NSString *nowName;
@property (copy, nonatomic) NSString *oldName;
@property (copy, nonatomic) NSString *nameChangedTime;
@property (strong, nonatomic) Bag *bag;
@end
1.字典轉模型.
  NSDictionary *dict = @{
                       @"name" : @"Jack",
                       @"icon" : @"lufy.png",
                       @"age" : @20,
                       @"height" : @"1.55",
                       @"money" : @100.9,
                       @"sex" : @(SexFemale),
                       @"gay" : @"true"
                       };
//轉換
User *user = [User mj_objectWithKeyValues:dict];
2.模型中嵌套模型
NSDictionary *dict = @{
                       @"name" : @"Agree!Nice weather!",
                       @"user" : @{
                               @"name" : @"Jack",
                               @"icon" : @"lufy.png"
                               },
                       @"retweetedStatus" : @{
                               @"text" : @"Nice weather!",
                               @"user" : @{
                                       @"name" : @"Rose",
                                       @"icon" : @"nami.png"
                                       }
                               }
                       };
//轉換
Status *status = [Status mj_objectWithKeyValues:dict];
3.模型中有個數組屬性尘分,數組里面又要裝著其他模型
// 1.需要設置數組中包含哪些model key:屬性名字 value:包含的model名字
[StatusResult mj_setupObjectClassInArray:^NSDictionary *{
    return @{
             @"statuses" : @"Status",
             // @"statuses" : [Status class],
             @"ads" : @"Ad"
             // @"ads" : [Ad class]
             };
}];
或者在相關類的.m文件中實現   
/**
*  數組中需要轉換的模型類
*
*  @return 字典中的key是數組屬性名著摔,value是數組中存放模型的Class(Class類型或者NSString類型)
*/ 
+ (NSDictionary *)mj_replacedKeyFromPropertyName;
//2.
NSDictionary *dict = @{
                       @"totalNumber" : @"2014",
                       
                       @"statuses" : @[
                               @{
                                   @"text" : @"Nice weather!",
                                   @"user" : @{
                                           @"name" : @"Rose",
                                           @"icon" : @"nami.png"
                                           }
                                   },
                               @{
                                   @"text" : @"Go camping tomorrow!",
                                   @"user" : @{
                                           @"name" : @"Jack",
                                           @"icon" : @"lufy.png"
                                           }
                                   }
                               ],
                       @"ads" : @[
                               @{
                                   @"image" : @"ad01.png",
                                   @"url" : @"http://www.ad01.com"
                                   },
                               @{
                                   @"image" : @"ad02.png",
                                   @"url" : @"http://www.ad02.com"
                                   }
                               ]
                       };
//轉換
StatusResult *result = [StatusResult mj_objectWithKeyValues:dict];

注意不要忘了告訴MJExtension數組中包含的模型

3. 字典數組轉成模型數組
NSArray *dictArray = @[
                       @{
                           @"name" : @"Jack",
                           @"icon" : @"lufy.png"
                           },
                       @{
                           @"name" : @"Rose",
                           @"icon" : @"nami.png"
                           }
                       ];

//轉換
NSArray *userArray = [User mj_objectArrayWithKeyValuesArray:dictArray];
4.模型轉字典
User *user = [[User alloc] init];
user.name = @"Jack";
user.icon = @"lufy.png";

Status *status = [[Status alloc] init];
status.user = user;
status.text = @"Nice mood!";
//轉換
NSDictionary *statusDict = status.mj_keyValues;
5. 模型數組轉字典數組
User *user1 = [[User alloc] init];
user1.name = @"Jack";
user1.icon = @"lufy.png";

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

NSArray *userArray = @[user1, user2];
//轉換
NSArray *dictArray = [User mj_keyValuesArrayWithObjectArray:userArray];
6. 允許轉換哪些屬性
//在.m中實現
+ (NSArray *)mj_allowedPropertyNames;//只有這個數組中的屬性名才允許進行字典和模型的轉換
或者相關Model調用
+ (void)mj_setupAllowedPropertyNames:(MJAllowedPropertyNames)allowedPropertyNames;
7.忽略哪些屬性轉換
//在.m中實現
+ (NSArray *)mj_ignoredPropertyNames;
或者相關Model調用
+ (void)mj_setupIgnoredPropertyNames:(MJIgnoredPropertyNames)ignoredPropertyNames;
8. 將屬性名換為其他key去字典中取值
//.m中實現
// 字典中的key是屬性名摹察,value是從字典中取值
+ (NSDictionary *)mj_replacedKeyFromPropertyName;
9.轉換完成后的回調
// 當字典轉模型完畢時調用
- (void)mj_keyValuesDidFinishConvertingToObject;
//  當模型轉字典完畢時調用
- (void)mj_objectDidFinishConvertingToKeyValues;

若有需要只需在相關類中實現以上方法即可

四:注意事項

1.首先要分析需要轉換的數據結構調用正確的API.
2.遇到結構比較復雜的數據后,可以考慮分層轉換,不一定每一層都要按照固定的模式去轉換.
3.轉換嵌套結構的時候,一定要注意看是否需要實現某些方法告訴MJExtension包含哪些模型.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末旦签,一起剝皮案震驚了整個濱河市宁炫,隨后出現的幾起案子羔巢,更是在濱河造成了極大的恐慌罩阵,老刑警劉巖稿壁,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匪燕,死亡現場離奇詭異帽驯,居然都是意外死亡尼变,警方通過查閱死者的電腦和手機截碴,發(fā)現死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門日丹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哲虾,“玉大人,你說我怎么就攤上這事汪诉“羌模” “怎么了该编?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長于樟。 經常有香客問我隔披,道長奢米,這世上最難降的妖魔是什么鬓长? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任英上,我火速辦了婚禮苍日,結果婚禮上相恃,老公的妹妹穿的比我還像新娘拦耐。我一直安慰自己,他們只是感情好固翰,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著方援,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拳话。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天岸裙,我揣著相機與錄音,去河邊找鬼剧董。 笑死,一個胖子當著我的面吹牛晤碘,可吹牛的內容都是我干的园爷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼童社,長吁一口氣:“原來是場噩夢啊……” “哼求厕!你這毒婦竟也來了?” 一聲冷哼從身側響起扰楼,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呀癣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弦赖,有當地人在樹林里發(fā)現了一具尸體项栏,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年蹬竖,在試婚紗的時候發(fā)現自己被綠了沼沈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡币厕,死狀恐怖列另,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情旦装,我是刑警寧澤页衙,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響店乐,放射性物質發(fā)生泄漏艰躺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一眨八、第九天 我趴在偏房一處隱蔽的房頂上張望描滔。 院中可真熱鬧,春花似錦踪古、人聲如沸含长。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拘泞。三九已至,卻和暖如春枕扫,著一層夾襖步出監(jiān)牢的瞬間陪腌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工烟瞧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诗鸭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓参滴,卻偏偏與公主長得像强岸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砾赔,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容

  • 世界上轉換速度最快蝌箍、使用最簡單方便的字典轉模型框架 能做什么? MJExtension是一套字典和模型之間互相轉換...
    今年27閱讀 787評論 0 1
  • GitHub源碼:MJExtension star: 8.3k ?????? 以下內容來源于官方源碼暴心、 READM...
    獨木舟的木閱讀 3,454評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理妓盲,服務發(fā)現,斷路器专普,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • MJExtension是一套字典和模型之間互相轉換的超輕量級框架 1悯衬、字典(JSON) --> 模型(Model)...
    艷曉閱讀 1,640評論 0 1
  • 發(fā)現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,107評論 4 62