RestKit动态嵌套映射

San*_*eep 2 cocoa-touch core-data objective-c restkit

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

RestKit文档中的示例JSON结构:

{
  "blake": {        
    "email": "blake@restkit.org",        
    "favorite_animal": "Monkey"    
  },    
  "sarah": {
    "email": "sarah@restkit.org",   
    "favorite_animal": "Cat"
  }
}
Run Code Online (Sandbox Code Playgroud)

假设我的json有点不同;

我的JSON结构:

{ 
  "id" : 1,
  "author" : "RestKit",
  "blake": {        
    "email": "blake@restkit.org",        
    "favorite_animal": "Monkey"    
  },    
  "sarah": {
    "email": "sarah@restkit.org",   
    "favorite_animal": "Cat"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Product                                           Creator 

identifier          <------------------- >>       name
author                                            email
                                                  favouriteAnimal
Run Code Online (Sandbox Code Playgroud)

现在,我的映射看起来就像产品模型一样;

这就是我映射Product实体的方法,[mapping mapKeyPath:"id"toAttribute:"identifier"]; [mapping mapKeyPath:"author"toAttribute:"author"];

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

现在,在作者班.

我无法弄清楚映射上述JSON结构的常用方法.

Aub*_*man 6

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

{
  product: 
  {
    id: 1,
    author: 'RestKit',
    creators: [
      {
        id: 1,
        name: 'Blake',
        email: '...',
        favorite_animal: 'Monkey'
      },
      {
        id: 2,
        name: 'Sarah',
        email: '...',
        favorite_animal: 'Cat'
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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