Objective c 如何使用RestKit映射两个相关的JSON?

Objective c 如何使用RestKit映射两个相关的JSON?,objective-c,magento,restkit,restkit-0.20,Objective C,Magento,Restkit,Restkit 0.20,我有两个JSON,它们看起来像: { "749": { "email": "myMail@me.com", "firstname": "Mr", "lastname": "Smith" } } 及 获取第一个JSON的路径是mySite/customers,获取第二个JSON的路径是mySite/customers/:userId/addresses 其中,userId是来自第一个JSON的未命名属性(在我的示例中是749) 我是

我有两个JSON,它们看起来像:

{
    "749": {
        "email": "myMail@me.com",
        "firstname": "Mr",
        "lastname": "Smith"
    }
}

获取第一个JSON的路径是
mySite/customers
,获取第二个JSON的路径是
mySite/customers/:userId/addresses

其中,
userId
是来自第一个JSON的未命名属性(在我的示例中是749)

我是RestKit的新手,我真的不知道如何通过一个请求映射它


PS:我从Magento rest api获得这些JSON。

你没有说你想映射到什么,但是

对于第一个JSON,您需要在映射中使用以提取
749
值,同时将其用作键


对于第二个JSON,似乎没有任何与第一个JSON的连接,因此您需要尝试映射该JSON,然后返回具体问题。请参阅以获取指导。

RestKit希望每个对象都能由映射器处理的字典来描述。不过,您的服务并没有返回对象数组,而是返回字典字典字典,RestKit无法将其正确解释为它可以单独映射的对象集合。当然,如果您的服务可以返回字典数组,那么问题就会消失

幸运的是,在调用映射器之前,有一种方法可以将您收到的字典字典转换为字典数组。这是通过通过
-[RKObjectRequestOperation setWillMapDeserializedResponseBlock:
设置转换块来实现的

块接收初始解析的结果(这里是字典字典),您可以通过调用
-[NSDictionary allValues]
轻松地将其转换为字典数组:

RKManagedObjectStore *managedObjectStore = ...;
RKResponseDescriptor *responseDescriptor = ...;
NSURLRequest *request = ...;

RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];
managedObjectRequestOperation.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext;
[managedObjectRequestOperation setWillMapDeserializedResponseBlock:^id(id deserializedResponseBody) {
    return [deserializedResponseBody allValues];
}];
[[NSOperationQueue currentQueue] addOperation:managedObjectRequestOperation];

您可以先使用RestKit示例,然后再询问一般性问题单独映射这些JSON不是问题。我使用“addAttributeMappingFromKeyOfRepresentationToAttribute”映射了第一个JSON,但接下来呢?我可以使用第一个JSON的映射结果生成获取第二个JSON的路径(我只需要userID),但我需要为所有客户这样做,这将是一个很长的周期。有什么方法可以更容易地做到这一点吗?展示代码并提出这个问题-到目前为止,您提出的问题并不相同。你为什么想得到全部?为什么不直接获取当前选择的一个呢?使用循环。好的。一定是误会了。。。我有包含100个客户的JSON(JSON 1)。对于每个客户,我可以使用JSON 1中的属性custimerID来生成获取JSON 2的路径,就可以获取带有地址的JSON(JSON 2)。但是,为了做到这一点,我必须循环100次迭代,并向服务器发送100个请求。我不敢相信,这只是收集客户地址的一种方法。如果客户和他们的地址在一个JSON中,这不会是一个问题,我可以使用RestKit映射关系,但他们在单独的JSON中,这会造成问题。这是一个服务器问题,与RestKit无关。您需要了解服务器是否可以更改或提供另一个您可以使用的服务…是的,我知道这是糟糕的服务器逻辑,但这是标准Magento rest api服务的结果,我无法影响这一点。。。可能有人练习过使用Magento rest api吗?
RKManagedObjectStore *managedObjectStore = ...;
RKResponseDescriptor *responseDescriptor = ...;
NSURLRequest *request = ...;

RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];
managedObjectRequestOperation.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext;
[managedObjectRequestOperation setWillMapDeserializedResponseBlock:^id(id deserializedResponseBody) {
    return [deserializedResponseBody allValues];
}];
[[NSOperationQueue currentQueue] addOperation:managedObjectRequestOperation];