带有RestKit的NSDictionary中的嵌套对象



我有一个JSON文档,它在一个具有未知键的对象中包含具有已知模式的对象,我想用RestKit映射它。让我来解释一下:

{
    "object":
    {
        "unknownKey1" : {"data1" : "...", "data2" : "..."},
        "unknownKey2" : {"data1" : "...", "data2" : "..."},
        "unknownKey3" : {"data1" : "...", "data2" : "..."}
    }
}

只有在运行时才知道键为"object"的对象的设置。对象中包含的关键帧具有随机名称。然而,我知道存储在这些未知键上的对象的确切模式。

现在,我想将密钥为"object"的对象的内容映射到NSDictionary,因为它提供了对随机密钥的轻松访问。然而,由于存储在这些键上的对象的模式是已知的,我希望将它们映射到自定义对象。

那么,是否有可能映射到包含这些对象的NSDictionary?我还没有找到解决方案。。。

您可以这样做:

RKObjectMapping* mapping = [RKDynamicObjectMapping dynamicMapping];
mapping.objectMappingForDataBlock = ^(id data) {
    NSDictionary* object = [data objectForKey: @"object"];
    NSArray* keys = [object allKeys];
    RKObjectMapping* dataMapping = [RKObjectMapping objectMapping];
    //Use the keys to define mapping
    return dataMapping;
};

也许可以看看JSONKithttps://github.com/johnezang/JSONKit从JSON文档创建NSDictionary。

当您有这样的JSON结构时:

{
  "blake": {        
    "email": "blake@restkit.org",        
    "favorite_animal": "Monkey"    
  },    
  "sarah": {
    "email": "sarah@restkit.org",   
    "favorite_animal": "Cat"
  }
}

你可以这样映射:

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class] ];
mapping.forceCollectionMapping = YES;
[mapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"username"];
[mapping addAttributeMappingsFromDictionary:@{
    @"(username).email": @"email",
    @"(username).favorite_animal": "favoriteAnimal"
}];

您可以在RestKit Documentation 上阅读更多信息

最新更新