RestKit动态嵌套映射

时间:2012-08-11 07:03:20

标签: objective-c cocoa-touch core-data restkit

我看到restkit文档相当不错,并且有很多关于对象建模的例子。还有一个嵌套映射的例子,但我发现我的场景与此有点不同。 RestKit文档提供了嵌套属性的示例映射,其中包含以下json格式。

来自RestKit文档的示例JSON结构:

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

假设我的json与此有点不同;

我的JSON结构:

{ 
  "id" : 1,
  "author" : "RestKit",
  "blake": {        
    "email": "blake@restkit.org",        
    "favorite_animal": "Monkey"    
  },    
  "sarah": {
    "email": "sarah@restkit.org",   
    "favorite_animal": "Cat"
  }
}

我创建了两个不同的managedobject模型,它具有以下属性和许多关系。

我的结构的两个不同实体Product和creator映射上面的JSON对象。

Product                                           Creator 

identifier          <------------------- >>       name
author                                            email
                                                  favouriteAnimal

现在,我的映射对于Product model来说将是这样的;

这是我映射Product实体的方式,     [mapping mapKeyPath:“id”toAttribute:“identifier”];     [mapping mapKeyPath:“author”toAttribute:“author”];

但请注意,映射嵌套字典属性对我不起作用。 // [mapping mapKeyOfNestedDictionaryToAttribute:@“creators”];

现在,在作者班上。

我无法找出映射上述JSON结构的常用方法。

1 个答案:

答案 0 :(得分:6)

如果您可以控制网络服务,我强烈建议重新组织您的响应数据,如下所示:

{
  product: 
  {
    id: 1,
    author: 'RestKit',
    creators: [
      {
        id: 1,
        name: 'Blake',
        email: '...',
        favorite_animal: 'Monkey'
      },
      {
        id: 2,
        name: 'Sarah',
        email: '...',
        favorite_animal: 'Cat'
      }
    ]
  }
}

遵循此结构,您将能够使用RestKit的嵌套映射功能,并且该关系将正确反映在对象加载器委托接收的反序列化对象中。 RestKit依赖于命名和结构标准来简化实现任务所需的代码。您的示例与键值编码标准不同,因此RK无法提供与数据格式交互的简便方法。

如果您无权访问或无法更改,我认为您需要使用映射映射已知的键值对,并使用自定义评估程序执行剩余的分配。您需要假设未知密钥实际上是关联创建者的名称值,并且它们的关联值包含每个的属性哈希值。然后使用它,然后手动重建每个对象。