2013-12-10 2 views
1

Мне нужно отобразить эту структуру, но я не знаю, как идентифицировать часть «br.myservice.com», потому что она изменяется, и я не могу создать регулярный RKObjectMapping , поскольку он использует фиксированные строки.Restkit - Как сопоставить объекты json с именами изменяемых ключей

{ "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"] 
    } 
} 
+0

что вы имеете в виду с ней изменения? имя ключа? – thorb65

+0

«us.myservice.com», «br.myservice.com», да. – jturolla

+0

один внешний словарь с ключевыми «объектами», а затем еще один словарь, ключ которого не фиксирован. поэтому здесь вам нужно сделать цикл и извлечь их. –

ответ

2

Вы должны использовать addAttributeMappingFromKeyOfRepresentationToAttribute: так:

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[MyObject class]]; 
mapping.forceCollectionMapping = YES; 
[mapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"host"]; 
[mapping addAttributeMappingsFromDictionary:@{ 
    @"(host).url": @"url", 
    @"(host).name": @"name", 
    ... and so on .... 
}]; 
+0

Это правильно, но здесь есть проблема. Если «хост» является доменным именем, restkit предполагает, что каждый «уровень» домена является уровнем json. Если это «something.com», и у меня есть свойство «имя», «электронная почта», он попытается найти something.com.name, something.com.email, но правильная вещь будет «(something.com). электронной почты ", можете ли вы придумать решение? – jturolla

+0

На данный момент есть два запроса на передачу, которые могут помочь - https://github.com/RestKit/RestKit/pull/1537 и https://github.com/RestKit/RestKit/pull/1541 – Simon

0

Предполагая, что ключи вам неизвестны на момент написания кода:

Вам нужно будет создать динамическое отображение (RKDynamicMapping) с блоком, который инспектирует принятый словарь JSON и создает (и возвращает) настраиваемое отображение объектов на лету.

Если вы знаете ключи, просто добавьте их все и все, что подходит, будут использоваться во время выполнения.

Смежные вопросы