【问题标题】:Restkit — How to map json objects with mutable key namesRestkit — 如何用可变键名映射 json 对象
【发布时间】:2013-12-10 13:12:22
【问题描述】:

我必须映射这个结构,但我不知道如何识别“br.myservice.com”部分,因为它会发生变化,我无法构建常规的RKObjectMapping,因为它使用固定字符串。

{ "objects": {
    "br.myservice.com": {
        "url": "http://br.myservice.com",
        "name": "Brazil",
        "flag": "br",
        "countries": ["br"]
    },
    "us.myservice.com": {
        "url": "http://us.myservice.com",
        "name": "United States",
        "flag": "us",
        "countries": ["us"]
  }
}

【问题讨论】:

  • 你的意思是它的变化?键名?
  • “us.myservice.com”,“br.myservice.com”,是的。
  • 一个带有键“objects”的外部字典,然后是另一个键不固定的字典。所以在这里你需要做一个循环并提取它们。
  • 我知道如何手动执行此操作,@AnoopVaidya,我不想使用 restkit 对象映射。

标签: ios iphone json restkit restkit-0.20


【解决方案1】:

你需要像这样使用addAttributeMappingFromKeyOfRepresentationToAttribute:

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[MyObject class]];
mapping.forceCollectionMapping = YES;
[mapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"host"];
[mapping addAttributeMappingsFromDictionary:@{
    @"(host).url": @"url",
    @"(host).name": @"name",
    ... and so on ....
}];

【讨论】:

  • 这是对的,但这里有一个问题。如果“主机”是域名,restkit 假设域的每个“级别”都是 json 的级别。如果它是“something.com”并且我有属性“name”、“email”,它会尝试查找something.com.name、something.com.email,但正确的应该是“(something.com)。电子邮件”,你能想出一个解决办法吗?
  • 目前有两个拉取请求可能会有所帮助 - github.com/RestKit/RestKit/pull/1537github.com/RestKit/RestKit/pull/1541
【解决方案2】:

假设您在编写代码时不知道密钥:

您需要创建一个动态映射 (RKDynamicMapping),其中包含一个检查接收到的 JSON 字典并动态创建(并返回)自定义对象映射的块。

如果您知道密钥,只需将它们全部添加,任何合适的都将在运行时使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多