我有以下JSON,我似乎无法映射restkit 0.2
{
"data":
{"usersA":[
{"name":"lal1","rank":"rank1"},
{"name":"lal2","rank":"rank2"},
],
{"usersB":[
{"name":"lal1","rank":"rank1"},
{"name":"lal2","rank":"rank2"},
{"name":"lal3","rank":"rank3"},
],
{"usersC":[
{"name":"lal1","rank":"rank1"},
{"name":"lal2","rank":"rank2"},
{"name":"lal3","rank":"rank3"},
{"name":"lal4","rank":"rank4"},
],
}
}
我创建了以下用户类:
@interface User : NSObject
@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSString * rank;
@end
像这样映射:
RKObjectMapping *userArrayMapping = [RKObjectMapping mappingForClass:[User class]];
[videoMapping addAttributeMappingsFromDictionary:@{@"name": @"name",@"rank": @"rank"}];
并调用data.users keyPath:
[RKResponseDescriptor responseDescriptorWithMapping:userArrayMapping
method:RKRequestMethodGET
pathPattern:HOME_SCREEN_API_URI
keyPath:@"data.usersA"
statusCodes:[NSIndexSet indexSetWithIndex:200]];
这很好,我得到了#34;用户A"使用以下代码映射到User类数组:
__block NSMutableArray* dataArr = [[NSMutableArray alloc]init];
[[RKObjectManager sharedManager] getObjectsAtPath:USERS_API
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
dataArr = mappingResult.array;
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", error);
}];
但我似乎无法映射"数据"将对象转换为包含" usersA"," usersB"和"用户C"。
我正在使用restkit 0.2。我能找到的唯一例子是以前的版本......
任何帮助将不胜感激!
TX。
答案 0 :(得分:0)
由于您在响应JSON中只有3个不同的密钥路径,因此只需创建3个响应描述符并将它们全部添加到对象管理器中。每个响应描述符之间的唯一区别是关键路径:
如果你有一个未知数字或任意一组关键路径,这个解决方案并不理想,但它对你有用而且很简单。
执行此操作时,所有映射的项目都将在mappingResult.array
中返回,但如果您需要,可以使用mappingResult.dictionary
查找每个对象的原始密钥路径。