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 对象的主要内容,如果未能解决你的问题,请参考以下文章