gpt4 book ai didi

ios - 如何使用 RestKit 将源 JSON 映射到结构不同的模型?

转载 作者:行者123 更新时间:2023-11-28 22:16:43 26 4
gpt4 key购买 nike

我有一个固定结构的 JSON 和一个具有不同结构的固定数据模型。例如,对于源模型中对象的某些属性,我必须在目标数据模型中创建一个新对象,每个属性一个对象,源模型中的一些其他对象在目标数据模型中不需要。总之,我需要将源模型映射到结构不同的目标模型,具有不同的对象数量和结构。 RestKit 有可能吗?最好的方法是什么?我发现 RKValueTransformer 类组似乎是此类工作的工具,但一旦我使用自定义转换转换顶级对象,我就必须使用字典。在某种意义上,是否有任何方法可以从值转换器的 block 重新进入对象映射层次结构,以便能够对具有已知结构的对象使用其他映射?还是有更好的方法来做到这一点?

这是一个例子。假设我有以下 JSON:

"label": {
"title": "foo",
"color": "red",
"font": "times"
}

我必须将它映射到以下对象:

@interface Label : NSObject {
@property (strong) NSString* title;
@property (strong) NSArray* attributes; // array of Attribute
}

@interface Attribute : NSObject {
@property (strong) NSString* key;
@property (strong) NSString* value;
}

结果对象看起来像这样:

Label {
title = @"foo",
attributes = @[
Attribute { key = @"color", value = @"red" },
Attribute { key = @"font", value = @"times" }
]
}

最佳答案

您的问题超出了 RestKit 的标准范围。以下是您可能如何实现您的要求的想法(我还没有尝试过):

对于要映射到属性的每个键/值对,添加一个从源键到匹配目标键的关系映射。这是一段不干净的代码出现的地方,因为我们需要拦截正在设置的这个键并将提供的属性添加到公共(public)数组。有可能我们可以使用 setValue:forUndefinedKey: - 首先尝试它,因为它可以最大限度地减少代码。检查值的类型,如果是属性,则添加它。如果这不起作用,请考虑添加一个 set##KEY_NAME##:(Attribute *) 方法。

关系映射使用另一个映射。该映射需要获取属性的键和值:

RKObjectMapping *attributeMapping = [RKObjectMapping mappingForClass:[Attribute class]];
[attributeMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"key"];
[attributeMapping addAttributeMappingsFromDictionary:@{ @"(key)": @"value" }];

关于ios - 如何使用 RestKit 将源 JSON 映射到结构不同的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com