在gitHub上README中有中文说明,以及怎么导入到项目中
现在介绍一下怎么解析复杂多层的数据
参照README中的介绍以及结合我自己项目的经验做一个介绍
1,json数据有一层或者两层多层,但是每一层的嵌套的时候都是字典类型,即为:(不要管这个json格式对不对)
{
“1”:“1”,
“2”:{
“3”:“3“,
”4“:{
”7“:”7“
},
”5“:”5“,
”6“:”6“
}
}
就是这样一层一层的字典形式的,只需要一层一层的把对应的字段写入model中,YYModel会自动转。
例子:
// 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
//返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。
+ (NSDictionary *)modelCustomPropertyMapper {
return @{@"name" : @"n",
@"page" : @"p",
@"desc" : @"ext.desc",
@"bookID" : @[@"id",@"ID",@"book_id"]};
}
@end
重点是这张图片
图片.png
2,json数据中有多层,但是是不同类型,此时就要用到:容器类属性
@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
// 返回容器类中的所需要存放的数据类型 (以 Class 或 Class Name 的形式)。
+ (NSDictionary *)modelContainerPropertyGenericClass {
return @{@"shadows" : [Shadow class],
@"borders" : Border.class,
@"attachments" : @"Attachment" };
}
@end
将每一层的数据放到一个容器里面,容器的数据类型由返回的json决定。
图片.png
图片.png
图片.png
图片.png
3,model里面如何嵌套model(满足的要求就是 嵌套的都是字典类型)
图片.png
图片.png
4,YYmodel还有别的功能,都在README中,目前我就用这个解析数据,满足任何坑的后台,能够拿到任何层的数据
纯字典和字典数组混合,替换关键字,映射类的方法不同
映射:
// 返回容器类中的所需要存放的数据类型 (以 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"]};
}
网友评论