Restkit — 如何用可变键名映射 json 对象

Posted

技术标签:

【中文标题】Restkit — 如何用可变键名映射 json 对象【英文标题】:Restkit — How to map json objects with mutable key names 【发布时间】: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 对象映射。 【参考方案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/1537 和 github.com/RestKit/RestKit/pull/1541【参考方案2】:

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

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

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

【讨论】:

以上是关于Restkit — 如何用可变键名映射 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

数据类型映射:查询键名和返回值

如何用键的虚线名称形成json主体

如何使用 RestKit 映射根词典?

JSON 对象映射 - RestKit

Restkit:来自 JSON parentId 的映射关系

restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)