如何使用RestKit RKObjectMapping映射下面的嵌套json?我只需要映射“数据”。我下面的当前代码返回(空)-谢谢!
{
"sucess": true,
"error": {
"code": "",
"message": ""
},
"data": [
{
"id": 1,
"name": "Salad",
"description": "Salad Desc",
"category_id": 1
},
{
"id": 2,
"name": "Soup",
"description": "Soup Desc",
"category_id": 1
},
{
"id": 3,
"name": "Wrap",
"description": "Wrap Desc",
"category_id": 1
},
{
"id": 4,
"name": "Appetizers",
"description": "Appetizers Desc",
"category_id": 1
}
]
}
类(class)
@interface Subcategory : NSObject
@property (nonatomic, retain) NSNumber *subcategoryID;
@property (nonatomic, retain) NSNumber *categoryID;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *thumbnail;
@property (nonatomic, retain) NSArray *data;
ViewController
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[Subcategory class]];
RKObjectMapping* dataMapping = [RKObjectMapping mappingForClass:[Subcategory class]];
[dataMapping mapKeyPath:@"id" toAttribute:@"subcategoryID"];
[dataMapping mapKeyPath:@"category_id" toAttribute:@"categoryID"];
[dataMapping mapAttributes:@"name", @"description", nil];
[mapping mapKeyPath:@"data" toRelationship:@"data" withMapping:dataMapping];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[NSString stringWith
最佳答案
您缺少rootKeyPath,而且还在提供程序中设置了映射:
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[Subcategory class]];
RKObjectMapping* dataMapping = [RKObjectMapping mappingForClass:[Subcategory class]];
[dataMapping mapKeyPath:@"id" toAttribute:@"subcategoryID"];
[dataMapping mapKeyPath:@"category_id" toAttribute:@"categoryID"];
[dataMapping mapAttributes:@"name", @"description", nil];
dataMapping.rootKeyPath = @"data"; //this is what you were missing
//get your mapping provider (i'm not sure if you already have on declared)
[mappingProvider setObjectMapping:dataMapping forResourcePathPattern:@"/somepath/toservice/"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/somepath/toservice/"];
以下是更多信息,可以回答您有关进入其他元素的问题(例如“错误”):
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
NSError *parseError = nil;
id response = [objectLoader.response parsedBody:&parseError];
DLog(@"response %@", response);
if (!parseError) {
NSString *errorMessage = [[response valueForKey:@"error"] valueForKey:@"message"];
//do something with it
}
}
关于objective-c - RestKit RKObjectMapping嵌套json,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10167486/