【问题标题】:RestKit: Mapping nested json to one entity objectRestKit:将嵌套的 json 映射到一个实体对象
【发布时间】:2013-10-02 20:42:24
【问题描述】:

我有一个嵌套的 json 结构如下:

{
    "receiver-id":123456,
    "rewards": [
       {
        "content": "reward text 1",
        "reward-code": "456ABC",
        "reward-Id": "234"
      },
      {
        "content": "reward text 2",
        "reward-code": "012ABC",
        "reward-Id": "567"
       }
   ]
}

我有一个实体对象如下,我希望将上面的json直接映射到:

@interface Reward: NSManagedObject
@property (nonatomic, retain) NSNumber * receiverID;
@property (nonatomic, retain) NSString * content;
@property (nonatomic, retain) NSString * rewardCode;
@property (nonatomic, retain) NSString * rewardID;

我怎样才能将上面的json结构直接映射到上面的Reward实体?我不想有一个集合或另一个实体来存储来自 json 的 rewards 内容。我只想将每个rewards 集合与相应的高级receiverID 属性一起存储为Reward 实体中的单独行。

我尝试了以下映射,但只有receiverID 被映射。我究竟做错了什么?在这种情况下如何访问rewards 数组元素?

_rewardsMapping = [RKEntityMapping mappingForEntityForName:@"Reward" inManagedObjectStore:objectStore];
_rewardsMapping.forceCollectionMapping = YES;
_rewardsMapping.identificationAttributes = @[ @"rewardID" ];
[_rewardsMapping addAttributeMappingsFromDictionary:@{
    @"receiver-id":@"receiverID",
    @"(rewards).content": @"content",
    @"(rewards).reward-code": @"rewardCode",
    @"(rewards).reward-id": @"rewardID"
}];

【问题讨论】:

    标签: ios json mapping restkit restkit-0.20


    【解决方案1】:

    你不能真正做你想做的事。 JSON 的结构将导致一个对象保存 receiver-id 以及与多个 Reward 实例的关系。这也是 Core Data 更喜欢存储数据的方式。

    您目前拥有的是一个由许多不同功能组成的映射,以支持与您收到的完全不同的 JSON。您需要:

    1. 修改源 JSON 以将 receiver-id 嵌入到数组中的每个项目中
    2. 为“容器”创建一个映射并将关系添加到您的 rewardsMapping(并修复该映射)
    3. 将所有内容映射到包含几个键的字典中,其中一个包含其他字典的数组,然后将其发布到您的核心数据存储中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      相关资源
      最近更新 更多