Old*_*Fox 5 mapping json objective-c restkit
我正在使用Objective C项目,该项目使用RestKit框架来解析JSON响应.现在我需要一些关于以下情况的对象映射设置的帮助:JSON响应:
{
"data": {
"SOME.API.Auth": {
"maxVersion": 2,
"minVersion": 1,
"path": "auth.cgi"
},
"SOME.Station": {
"maxVersion": 1,
"minVersion": 1,
"path": "Station/task.cgi"
}
},
"success": true
}
Run Code Online (Sandbox Code Playgroud)
和以下对象:
@interface Response : NSObject
@property (strong, nonatomic) NSArray *data;
@property (assign, nonatomic) BOOL success;
@end
@interface SomeAPIInfo : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *path;
@property (strong, nonatomic) NSString *minVersion;
@property (strong, nonatomic) NSString *maxVersion;
@end
Run Code Online (Sandbox Code Playgroud)
这是我的映射设置:
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[Response class]];
[responseMapping addAttributeMappingsFromDictionary:@{@"success": @"success"}];
RKObjectMapping *dataObjectMapping = [RKObjectMapping mappingForClass:[SomeAPIInfo class]];
dataObjectMapping.forceCollectionMapping = YES;
[dataObjectMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"name"];
[dataObjectMapping addAttributeMappingsFromDictionary:@{
@"(name).path": @"path",
@"(name).minVersion": @"minVersion",
@"(name).maxVersion": @"maxVersion"}];
[responseMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"data"
toKeyPath:@"data"
withMapping:dataObjectMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
pathPattern:nil
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[_objectManager addResponseDescriptor:responseDescriptor];
Run Code Online (Sandbox Code Playgroud)
问题是"数据"对象没有正确映射:NSArray*data; 填充了2个"SomeAPIInfo"对象.name已正确填充,但其他值(path,maxVersion,minVersion)为空.
我究竟做错了什么 ?是否有另一种方法来映射"数据"对象?也许直接进入NSDictionary,因此"Some.API.Auth"将是关键,"SomeAPIInfo"将是对象(没有"name"属性).
感谢帮助!
编辑:我认为由于键中的点("SOME.API.Auth"),映射不起作用.
RKMappingOperation.m:
- (NSArray *)simpleAttributeMappings
{
NSMutableArray *mappings = [NSMutableArray array];
for (RKAttributeMapping *mapping in self.nestedAttributeMappings) {
if ([mapping.sourceKeyPath rangeOfString:@"."].location == NSNotFound) {
[mappings addObject:mapping];
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了由 RestKit https://github.com/RestKit/RestKit/issues/1532中的错误引起的类似问题。我尝试通过创建具有相同结构但没有点的假 JSON 响应来消除可能的点问题,并查看问题是否仍然存在。
归档时间: |
|
查看次数: |
1200 次 |
最近记录: |