2

我看到 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"
  }
}

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

我的结构产品和创建者有两个不同的实体来映射上述 JSON 对象。

Product                                           Creator 

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

现在,对于 Product 模型,我的映射看起来像这样;

这就是我映射产品实体的方式,[映射 mapKeyPath:"id" toAttribute:"identifier"]; [映射mapKeyPath:“作者”到属性:“作者”];

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

现在,在作者课上。

我想不出映射上述 JSON 结构的常用方法。

4

1 回答 1

6

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

{
  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 没有提供与您的数据格式交互的简单方法。

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

于 2012-08-11T20:03:05.357 回答