Json RestKit:带有数组的动态嵌套属性

Json RestKit:带有数组的动态嵌套属性,json,dynamic,attributes,nested,restkit,Json,Dynamic,Attributes,Nested,Restkit,我正在努力寻找一种将一些JSON映射到RestKit的方法。这是我所看到的一个例子: "results":{ "Test1":[ { "id":1, "name":"Test 1 here.", "language":"English", "type: "Test1" }

我正在努力寻找一种将一些JSON映射到RestKit的方法。这是我所看到的一个例子:

       "results":{
           "Test1":[
              {
                 "id":1,
                 "name":"Test 1 here.",
                 "language":"English",
                 "type: "Test1"
              }
           ],
           "Test2":[
              {
                 "id":3,
                 "name":"Another test 2",
                 "language":"English",
                 "type":"Test2"
              },
              {
                 "id":8,
                 "name":"More test 2",
                 "language":"English",
                 "type":"Test2"
              },
              {
                 "id":49,
                 "name":"foo",
                 "language":"English",
                 "type":"Test2"
              }
           ]
        }
理想情况下,JSON不会包含额外的冗余层“type”作为键,但这就是生命

我希望RestKit在“结果”下返回4个对象,类型为:

我尝试了不同的映射组合,例如:

RKObjectMapping *testMapping = [RKObjectMapping mappingForClass:[Test class]];
testMapping.forceCollectionMapping = YES;
[testMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"testType"];
[testMapping addAttributeMappingsFromDictionary:@{
                                                      @"(testType).id": @"testId",
                                                      @"(testType).name": @"testName",
                                                      @"(testType).language": @"testLanguage",
                                                      }];
但它仍然失败,因为它不是“type”JSON键下的单个对象——它是一个测试对象数组


有没有办法在RestKit中表示此映射?或者,如果没有,是否能够覆盖一些回调函数,以便我可以使其工作?不幸的是,我无法更改来自服务器的JSON数据。我认为最好的办法是创建一个响应描述符,其关键路径为
@“results”
,并带有一个。该映射将返回一个映射到
NSDictionary
的映射,该映射定义了许多关系。此字典只是一个容器,用于促进其他映射(关系)

使用
testMapping
,但不使用
addAttributeMappingFromKeyOfRepresentationAttribute
,通过迭代提供给动态映射的表示的键,并在每次迭代中创建一个关系来创建关系,因为您现在可以使用直接属性访问(以及内部
类型
属性)

使用
setObjectMappingForRepresentationBlock:
,您的块将被提供
表示
,在您的情况下,它是反序列化JSON的
NSDictionary
。在块内,您可以像通常一样创建映射,但其内容基于字典中的键



是键(Test1,Test2,…)任意的,或者有一组已知的选项吗?不幸的是,它们是未知的。并且可能有任意数量的选项。感谢您对此的回答。不过,我不太确定我是否了解您。我对RestKit比较陌生,所以我不确定如何实现您所说的内容--您有什么建议可以作为这方面的例子?我已经添加了更多的信息。AFAIK没有这种类型的映射的指南。试试看,如果你有问题,展示你的代码。啊,我现在知道了。这是我遗漏的部分。谢谢!我在另一个项目上转移了注意力,现在又回到了这个项目上。所以,我以为在你的帮助下我已经解决了,但仍然有问题。我理解你创建动态映射并在NSDictionary中获取表示的意思-我已经做到了。我没有理解的部分是如何指定动态数量的目标键路径。在我上面的示例中,我们有两个测试对象的NSArray(一个用于Test1,一个用于Test2)。我如何在类中指定它并动态映射到它(在我的表示块中)?我将返回一个到可变数组的映射,该数组具有每个键的关系,因此映射结果将包含自定义对象数组的字典
RKObjectMapping *testMapping = [RKObjectMapping mappingForClass:[Test class]];
testMapping.forceCollectionMapping = YES;
[testMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"testType"];
[testMapping addAttributeMappingsFromDictionary:@{
                                                      @"(testType).id": @"testId",
                                                      @"(testType).name": @"testName",
                                                      @"(testType).language": @"testLanguage",
                                                      }];
RKObjectMapping *testMapping = [RKObjectMapping mappingForClass:[Test class]];
[testMapping addAttributeMappingsFromDictionary:@{ @"id": @"testId", @"name": @"testName" }];

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    RKObjectMapping *testListMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
    for (NSString *key in representation) {
        [testListMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeypath:key toKeyPath:key withMapping:testMapping];
    }

    return testListMapping;
}];