在gitHub上README中有中文說(shuō)明,以及怎么導(dǎo)入到項(xiàng)目中
現(xiàn)在介紹一下怎么解析復(fù)雜多層的數(shù)據(jù)
參照README中的介紹以及結(jié)合我自己項(xiàng)目的經(jīng)驗(yàn)做一個(gè)介紹
1,json數(shù)據(jù)有一層或者兩層多層,但是每一層的嵌套的時(shí)候都是字典類型,即為:(不要管這個(gè)json格式對(duì)不對(duì))
{
“1”:“1”,
“2”:{
“3”:“3“,
”4“:{
”7“:”7“
},
”5“:”5“,
”6“:”6“
}
}
就是這樣一層一層的字典形式的,只需要一層一層的把對(duì)應(yīng)的字段寫入model中,YYModel會(huì)自動(dòng)轉(zhuǎn)。
例子:
// JSON:
{
"n":"Harry Pottery",
"p": 256,
"ext" : {
"desc" : "A book written by J.K.Rowing."
},
"ID" : 100010
}
// Model:
@interface Book : NSObject
@property NSString *name;
@property NSInteger page;
@property NSString *desc;
@property NSString *bookID;
@end
@implementation Book
//返回一個(gè) Dict,將 Model 屬性名對(duì)映射到 JSON 的 Key。
+ (NSDictionary *)modelCustomPropertyMapper {
return @{@"name" : @"n",
@"page" : @"p",
@"desc" : @"ext.desc",
@"bookID" : @[@"id",@"ID",@"book_id"]};
}
@end
重點(diǎn)是這張圖片

圖片.png
2,json數(shù)據(jù)中有多層,但是是不同類型,此時(shí)就要用到:容器類屬性
@class Shadow, Border, Attachment;
@interface Attributes
@property NSString *name;
@property NSArray *shadows; //Array<Shadow>
@property NSSet *borders; //Set<Border>
@property NSMutableDictionary *attachments; //Dict<NSString,Attachment>
@end
@implementation Attributes
// 返回容器類中的所需要存放的數(shù)據(jù)類型 (以 Class 或 Class Name 的形式)。
+ (NSDictionary *)modelContainerPropertyGenericClass {
return @{@"shadows" : [Shadow class],
@"borders" : Border.class,
@"attachments" : @"Attachment" };
}
@end
將每一層的數(shù)據(jù)放到一個(gè)容器里面,容器的數(shù)據(jù)類型由返回的json決定。
圖片.png

圖片.png

圖片.png

圖片.png
3,model里面如何嵌套model(滿足的要求就是 嵌套的都是字典類型)

圖片.png

圖片.png
4,YYmodel還有別的功能,都在README中,目前我就用這個(gè)解析數(shù)據(jù),滿足任何坑的后臺(tái),能夠拿到任何層的數(shù)據(jù)
純字典和字典數(shù)組混合,替換關(guān)鍵字,映射類的方法不同
映射:
// 返回容器類中的所需要存放的數(shù)據(jù)類型 (以 Class 或 Class Name 的形式)。
+ (NSDictionary *)modelContainerPropertyGenericClass {
return @{@"shadows" : [Shadow class],
@"borders" : Border.class,
@"attachments" : @"Attachment" };
}
替換字符:
+ (NSDictionary *)modelCustomPropertyMapper {
return @{@"name" : @"n",
@"page" : @"p",
@"desc" : @"ext.desc",
@"bookID" : @[@"id",@"ID",@"book_id"]};
}