RestKit RKObjectMapping nested json

How to map nested json below using RestKit RKObjectMapping? I only need to display the "data". My current code below returns (null) - Thanks!

{ "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 
+7
source share
1 answer

You are missing rootKeyPath, as well as display settings in the provider:

 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/"]; 

Here is more information to answer your question about accessing other elements (for example, "error"):

 - (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 } } 
+6
source

All Articles