根据需求、后台返回以下数据、须要解析为model类、方便操做数据。json
NSDictionary *returnDic = @{
@"birthPlace":@"宁夏固原市彭阳县草庙乡",
@"education":@"博士",
@"id":@"115",
//字典
@"personalMessage":@{
@"marryAge":@"30",
@"marryStatus":@"1",
@"paddress":@"宁夏固原市",
@"phone":@"158*****289",
@"pname":@"sxk",
},
@"babyFatherInfo" : @{
@"bFatherAge" : @"38",
@"bFatherUnit" : @"19957253180",
@"bFatherPhone" : @"2222222",
@"husbFamHistory" : @"3333333",
@"bFatherPcId" : @"228384848484944",
@"isHusbFamHistory" : @"1",
@"bFatherJob" : @"01",
@"bFatherHealth" : @"1",
@"bFatherName" : @"sxk"
},
@"pregnancyHistorys" : @{
@"pregnancyHistory" : @[
@{
@"zycqk" : @"01",
@"historyId" : @"210585",
@"birthTime" : @"2019-04",
@"bearType" : @"01",
@"chhfqk" : @"01",
@"babyInfos" : @{
@"babyInfo" : @[
@{
@"babysex" : @"01",
@"babyWeight" : @"3000",
@"babyStatus" : @"01",
@"ycrdn" : @"210585"
},
@{
@"babysex" : @"01",
@"babyWeight" : @"3000",
@"babyStatus" : @"01",
@"ycrdn" : @"210585"
}
]
}
},
@{
@"zycqk" : @"01",
@"historyId" : @"210586",
@"birthTime" : @"2019-04",
@"bearType" : @"01",
@"chhfqk" : @"01",
@"babyInfos" : @{
@"babyInfo" : @[
@ {
@"babysex" : @"01",
@"babyWeight" : @"3000",
@"babyStatus" : @"01",
@"ycrdn" : @"210586"
}
]
}
},
]
},
};
复制代码
此数据包括四大模块:数组
1.基本信息-字符串bash
2.我的信息-personalMessage(字典)app
3.小孩父亲资料-babyFatherInfo(字典)ui
4.历史怀孕详情-pregnancyHistorys(字典包含一个大的数组pregnancyHistory,数组包含n个字典,每一个字典包含基本信息以及n个胎数)atom
接下来咱们构建model类:spa
#import <Foundation/Foundation.h>
@class YYModel_PersonalModel,PersonalMessageModel,BabyFatherInfoModel,PregnancyHistorys,BabyInfos,BabyInfoModel;
NS_ASSUME_NONNULL_BEGIN
@interface YYModel_PersonalModel : NSObject
@property(nonatomic,copy) NSString *birthPlace;
@property(nonatomic,copy) NSString *education;
@property(nonatomic,copy) NSString *personId;
@property(nonatomic,strong) PersonalMessageModel *personalMessage;
@property(nonatomic,strong) BabyFatherInfoModel *babyFatherInfo;
@end
@interface PersonalMessageModel : NSObject
@property(nonatomic,copy) NSString *marryAge;
@property(nonatomic,copy) NSString *marryStatus;
@property(nonatomic,copy) NSString *paddress;
@property(nonatomic,copy) NSString *phone;
@property(nonatomic,copy) NSString *pname;
@end
@interface BabyFatherInfoModel : NSObject
@property(nonatomic,copy) NSString *bFatherAge;
@property(nonatomic,copy) NSString *bFatherUnit;
@property(nonatomic,copy) NSString *bFatherPhone;
@property(nonatomic,copy) NSString *bFatherJob;
@property(nonatomic,copy) NSString *bFatherName;
@end
@interface PregnancyHistorys : NSObject
@property(nonatomic,copy) NSString *zycqk;
@property(nonatomic,copy) NSString *birthTime;
@property(nonatomic,copy) NSString *historyId;
@property(nonatomic,copy) NSString *bearType;
@property(nonatomic,strong) BabyInfos *babyInfos;
@end
@interface BabyInfos : NSObject
@property(nonatomic,strong)NSArray *babyInfo;
@end
@interface BabyInfoModel : NSObject
@property(nonatomic,copy) NSString *babyWeight;
@property(nonatomic,copy) NSString *babyStatus;
@property(nonatomic,copy) NSString *babysex;
@property(nonatomic,copy) NSString *ycrdn;
@end
NS_ASSUME_NONNULL_END
复制代码
使用YYModel解析以下code
首先咱们解析除pregnancyHistorys意外全部数据字符串
在model .m文件使用以下方法string
// 若是实现了该方法,则处理过程当中会忽略该列表内的全部属性-黑名单
+ (NSArray *)modelPropertyBlacklist {
return @[@"pregnancyHistorys"];
}
复制代码
因为基本信息出现了id关键字、model .m文件中特做以下处理:
// 当后台返回系统关键字时、属性数据映射,用来定义多样化数据时转换声明
+ (NSDictionary *)modelCustomPropertyMapper {
return @{
@"personId":@"id",
};
}
复制代码
执行了此方法,就能够将id转变为personID。
解析过程以下:(注明了YYModel经常使用的方法、这里不一一解释)
NSDictionary *dictionary = [[YYModelJsonData shareInstance]dataDictionary];
//字典转模型 + (nullable instancetype)yy_modelWithDictionary:(NSDictionary *)dictionary
YYModel_PersonalModel *model = [YYModel_PersonalModel yy_modelWithDictionary:dictionary];
NSLog(@"出生地:%@、教育水平:%@、personID:%@、我的信息-结婚年龄:%@、小孩父亲:%@",model.birthPlace,model.education,model.personId,model.personalMessage.marryAge,model.babyFatherInfo.bFatherName);
//模型转json字符串 yy_modelToJSONString
NSString *json = [model yy_modelToJSONString];
NSLog(@"json:%@",json);
// 模型转NSObject yy_modelToJSONObject
NSDictionary *returnDic = [model yy_modelToJSONObject];
NSLog(@"returnValue:%@",returnDic);
// 模型转NSData yy_modelToJSONData
NSData *dataJson = [model yy_modelToJSONData];
NSLog(@"dataJson:%@",dataJson);
复制代码
打印结果以下(只打印个别字段):
2019-04-24 10:53:40.561403+0800 RepeatUnit_iOS[2353:78795] 出生地:宁夏固原市彭阳县草庙乡、教育水平:博士、personID:11五、我的信息-结婚年龄:30、小孩父亲:sxk
2019-04-24 10:53:40.562234+0800 RepeatUnit_iOS[2353:78795] json:{"id":"115","personalMessage":{"phone":"158*****289","marryStatus":"1","marryAge":"30","paddress":"宁夏固原市","pname":"sxk"},"babyFatherInfo":{"bFatherJob":"01","bFatherAge":"38","bFatherPhone":"2222222","bFatherUnit":"19957253180","bFatherName":"sxk"},"birthPlace":"宁夏固原市彭阳县草庙乡","education":"博士"}
2019-04-24 10:53:40.562575+0800 RepeatUnit_iOS[2353:78795] returnValue:{
babyFatherInfo = {
bFatherAge = 38;
bFatherJob = 01;
bFatherName = sxk;
bFatherPhone = 2222222;
bFatherUnit = 19957253180;
};
birthPlace = "\U5b81\U590f\U56fa\U539f\U5e02\U5f6d\U9633\U53bf\U8349\U5e99\U4e61";
education = "\U535a\U58eb";
id = 115;
personalMessage = {
marryAge = 30;
marryStatus = 1;
paddress = "\U5b81\U590f\U56fa\U539f\U5e02";
phone = "158*****289";
pname = sxk;
};
}
2019-04-24 10:53:40.562824+0800 RepeatUnit_iOS[2353:78795] dataJson:<7b226964 223a2231 3135222c 22706572 736f6e61 6c4d6573 73616765 223a7b22 70686f6e 65223a22 3135382a 2a2a2a2a 32383922 2c226d61 72727953 74617475 73223a22 31222c22 6d617272 79416765 223a2233 30222c22 70616464 72657373 223a22e5 ae81e5a4 8fe59bba e58e9fe5 b882222c 22706e61 6d65223a 2273786b 227d2c22 62616279 46617468 6572496e 666f223a 7b226246 61746865 724a6f62 223a2230 31222c22 62466174 68657241 6765223a 22333822 2c226246 61746865 7250686f 6e65223a 22323232 32323232 222c2262 46617468 6572556e 6974223a 22313939 35373235 33313830 222c2262 46617468 65724e61 6d65223a 2273786b 227d2c22 62697274 68506c61 6365223a 22e5ae81 e5a48fe5 9bbae58e 9fe5b882 e5bdade9 98b3e58e bfe88d89 e5ba99e4 b9a1222c 22656475 63617469 6f6e223a 22e58d9a e5a3ab22 7d>
复制代码
如今咱们继续解析历史孕次(pregnancyHistorys),跟上面解析过程一模一样:
NSArray *history = [[dictionary objectForKey:@"pregnancyHistorys"]objectForKey:@"pregnancyHistory"];
//model数组集合 传入model类以及json数据
NSArray *historyModelArray = [NSArray yy_modelArrayWithClass:[PregnancyHistorys class] json:history];
NSLog(@"-%@",historyModelArray);
//第一个数据为例、实际应用中会根据indexPath等参数对应
PregnancyHistorys *historyModel = historyModelArray[0];
NSLog(@"小孩编号:%@---小孩infos:%@",historyModel.zycqk,historyModel.babyInfos.babyInfo);
//第一个数据为例、实际应用中会根据indexPath等参数对应
BabyInfoModel *babyInfoModel = [BabyInfoModel yy_modelWithDictionary:historyModel.babyInfos.babyInfo[0]];
NSLog(@"小孩体重:%@",babyInfoModel.babyWeight);
复制代码
打印结果以下(只打印个别字段):
2019-04-24 10:53:40.573012+0800 RepeatUnit_iOS[2353:78795] -(
"<PregnancyHistorys: 0x600001209d40>",
"<PregnancyHistorys: 0x600001209ec0>"
)
2019-04-24 10:53:40.573215+0800 RepeatUnit_iOS[2353:78795] 小孩编号:01---小孩infos:(
{
babyStatus = 01;
babyWeight = 3000;
babysex = 01;
ycrdn = 210585;
},
{
babyStatus = 01;
babyWeight = 3000;
babysex = 01;
ycrdn = 210585;
}
)
2019-04-24 10:53:40.573562+0800 RepeatUnit_iOS[2353:78795] 小孩体重:3000
复制代码
另外,YYModel还提供了白名单:
若是实现了该方法,则处理过程当中不会处理该列表外的属性-白名单
假如只须要解析我的信息时,返回personalMessage便可
+ (NSArray *)modelPropertyWhitelist {
return @[@"personalMessage"];
}
复制代码
经过以上解析过程、咱们基本掌握了YYModel常见的方法,解析之后,也能拿到本身想要的数据。具体处理过程还须要结合UI需求。