JSONModel簡(jiǎn)單使用and注意事項(xiàng)

覺(jué)得有用麻煩給個(gè)喜歡菠隆,謝謝各位親??

我們?cè)陂_發(fā)的項(xiàng)目的時(shí)候,需要很多model來(lái)存儲(chǔ)數(shù)據(jù)狂秘,通常JSONModel使用的比較多骇径,現(xiàn)在就來(lái)簡(jiǎn)單介紹一下JSONModel的使用。

首先配上在網(wǎng)絡(luò)請(qǐng)求中模型轉(zhuǎn)化的代碼:

FirstModel *result = [[FirstModel alloc] initWithDictionary:responseDic error:&error];

注意一:<一定要加這個(gè)方法呀者春,不然解析不出來(lái)破衔,我都被坑了N次了,最好建個(gè)ji lei>
后臺(tái)傳過(guò)來(lái)的參數(shù)钱烟,有時(shí)候是空值晰筛,是null,此時(shí)JSONModel在解析的時(shí)候會(huì)出現(xiàn)崩潰的現(xiàn)象拴袭,此時(shí)我們可以在.m文件中加入一個(gè)類方法:

//這個(gè)方法是把所有的屬性全部設(shè)置為可選值读第,這樣就算后臺(tái)傳過(guò)來(lái)的值是空值,也沒(méi)有關(guān)系
+ (BOOL)propertyIsOptional:(NSString *)propertyName {
    return YES;
}

注意二:在末尾


如果后臺(tái)傳過(guò)來(lái)的數(shù)據(jù)是這種形式的:

{
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
}

這是最簡(jiǎn)單的一種數(shù)據(jù)形式拥刻,我們只需要建立一個(gè)Object-C類怜瞒,繼承自JSONModel,在.h里面寫上和這兩個(gè)對(duì)應(yīng)的屬性就好了般哼,代碼如下:

#import "JSONModel.h"

@interface FirstModel : JSONModel

@property (assign, nonatomic) int      status;
@property (strong, nonatomic) NSString* title;
@property (strong, nonatomic) NSString* content;

@end

這種情況下吴汪,.m不需要做任何操作,但是蒸眠,如果后臺(tái)闖過(guò)來(lái)的參數(shù)比較復(fù)雜漾橙,我們想自己定義自己習(xí)慣的屬性來(lái)使用,那么我們可以在.m文件中進(jìn)行Key映射楞卡,例子上:
若后臺(tái)傳過(guò)來(lái)的數(shù)據(jù)的名字是這種形式的

{
    user_name_type = "\U6210\U529f";
    succeed = 1;
}

我們?cè)贔irstModel的.h中的代碼為:

#import "JSONModel.h"

@interface FirstModel : JSONModel

@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* type;

@end

我們?cè)?m文件中的代碼為

@implementation OrderModel

+(JSONKeyMapper*)keyMapper
{
  return [[JSONKeyMapper alloc] initWithDictionary:@{
    @"user_name_type": @"type"
  }];
}

@end

模型嵌套:

{
    msg = "\U6210\U529f";
    succeed = 1;
    data = 
                 {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }霜运;
}

此時(shí)我們需要?jiǎng)?chuàng)建兩個(gè)繼承自JSONModel的model類,在.h中實(shí)現(xiàn)如下代碼:

@interface SecondModel : JSONModel
@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* msg;
@property (strong, nonatomic) FirstModel* firstModel;
@end

模型集合:

{
    msg = "\U6210\U529f";
    succeed = 1;
    data =     (
                 {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        },
         {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }
    );
}

創(chuàng)建兩個(gè)繼承自JSONModel的model類臀晃,在.h中實(shí)現(xiàn)如下代碼:

@protocol ThirdModel
@end

@interface ThirdModel : JSONModel
@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* msg;
@property (strong, nonatomic) NSArray<FirstModel *>* firstModels;
@end

模型嵌套+模型集合(??此處有坑)

{
    msg = "\U6210\U529f";
    succeed = 1;
    data =     {
                   childList = (
                                                  {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        },
{
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }
                 );
                 otherChildList= (
                            {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        },
{
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }
                 );
                 
    };
}

這個(gè)模型比較復(fù)雜觉渴,字典里面套字典介劫,字典中又套用了數(shù)組徽惋,數(shù)組中又是字典,所以我們需要把邏輯整理清楚座韵,首先我們需要新建兩個(gè)繼承自JSONModel的model類分別為ForthModel和FiveModel险绘,在ForthModel的.h中作如下操作:

@interface ForthModel : JSONModel

@property (strong, nonatomic) NSArray< FirstModel  *>* otherChildList;
@property (strong, nonatomic) NSArray< FirstModel  *>* childList;

@end

同時(shí)踢京,我們需要在.m文件中做一個(gè)操作,不然解析不出來(lái)宦棺,代碼如下:

+ (NSString *)protocolForArrayProperty:(NSString *)propertyName {
    
    if ([propertyName isEqualToString:@"childList"]) {
        return NSStringFromClass([FirstModel class]);
    }
    if ([propertyName isEqualToString:@"otherChildList"]) {
        return NSStringFromClass([FirstModel class]);
    }
    return NSStringFromClass([NSDictionary class]);
}

ForthModel中代碼實(shí)現(xiàn)之后瓣距,實(shí)現(xiàn)FiveModel中的代碼,在.h中做如下操作

@interface FiveModel : JSONModel
@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* msg;
@property (strong, nonatomic) ForthModel* data;
@end

同時(shí)代咸,我們需要在FiveModel的.m文件中做一個(gè)操作蹈丸,不然依然解析不出來(lái),代碼如下:

+ (NSString *)protocolForArrayProperty:(NSString *)propertyName {
    
    if ([propertyName isEqualToString:@"data"]) {
        return NSStringFromClass([ForthModel class]);
    }
    return NSStringFromClass([NSDictionary class]);
}

注意:一定要在.m文件中加入這個(gè)判斷呐芥,不然解析失敗逻杖。

此時(shí),模型嵌套和模型集合就解析成功思瘟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荸百,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滨攻,更是在濱河造成了極大的恐慌够话,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件光绕,死亡現(xiàn)場(chǎng)離奇詭異女嘲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奇钞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門澡为,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人景埃,你說(shuō)我怎么就攤上這事媒至。” “怎么了谷徙?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拒啰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我完慧,道長(zhǎng)谋旦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任屈尼,我火速辦了婚禮册着,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脾歧。我一直安慰自己甲捏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布鞭执。 她就那樣靜靜地躺著司顿,像睡著了一般芒粹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上大溜,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天化漆,我揣著相機(jī)與錄音,去河邊找鬼钦奋。 笑死座云,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的付材。 我是一名探鬼主播疙教,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼伞租!你這毒婦竟也來(lái)了贞谓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤葵诈,失蹤者是張志新(化名)和其女友劉穎裸弦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體作喘,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡理疙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泞坦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窖贤。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贰锁,靈堂內(nèi)的尸體忽然破棺而出赃梧,到底是詐尸還是另有隱情,我是刑警寧澤豌熄,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布授嘀,位于F島的核電站挫以,受9級(jí)特大地震影響息尺,放射性物質(zhì)發(fā)生泄漏权纤。R本人自食惡果不足惜院尔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潜支。 院中可真熱鬧淘钟,春花似錦惧所、人聲如沸崖咨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掩幢。三九已至逊拍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間际邻,已是汗流浹背芯丧。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留世曾,地道東北人缨恒。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轮听,于是被迫代替她去往敵國(guó)和親骗露。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)血巍、插件萧锉、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評(píng)論 25 707
  • 扯閑篇 為啥寫這個(gè)題? 因?yàn)檫@題由簡(jiǎn)單到難坑真是多述寡。值得記錄下來(lái)好好研究研究 題目 Given amxnmatri...
    Sonass閱讀 309評(píng)論 0 0
  • lemontree2000閱讀 190評(píng)論 0 0
  • 昨天我和孟老師到安徽銅陵參加第二期卓越父母專業(yè)課的會(huì)務(wù)柿隙,也是人生第一次,我們倆高鐵多坐了一站鲫凶。 到站的時(shí)候禀崖,我們倆...
    雯雯媽媽育兒先育己家庭教育隨筆閱讀 221評(píng)論 0 0