@alisichkin
Программист

Как разобрать сложный JSON с помощью RestKit?

Добрый день!
Только начал изучать iOS и RestKit, так что не пинайте :)

Нужно с помощью RestKit разобрать следующий json ответ:
{"response":["60289",{"ID":"15405114","HEADER":"…"},{"ID":"15405113","HEADER":"…"},{"ID":"15405112","HEADER":"…"}]}

60289 – общее количество записей в уделенной базе.
Требуется получить массив Messages – ID, HEADER,..

Я создал два класса:

@interface Agancy : NSObject

@property (nonatomic, assign) long id;
@property (nonatomic, strong) NSString *name;

-(id) initWithDictionary:(NSDictionary*)source {
	self = [super init];
	if (self) {
		self.id = [[source valueForKey@"agancy"] longValue];
		self.name = [source valueForKey@"agancy_name"];
	}
	return self;
}

@interface Message : NSObject

@property (nonatomic, assign) long id;
@property (nonatomic, strong) NSString *header;
@property (nonatomic, strong) Agancy *agancy;

-(id) initWithDictionary:(NSDictionary*)source {
	self = [super init];
	if (self) {
		self.id = [[source valueForKey@"id"] longValue];
		self.header = [source valueForKey@"header"];
		self.agency = [[Agancy alloc] initWithDictionary:source];
	}
	return self;
}


И написал следующий код:

-(void) loadMessages {
	AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
	RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Message class]];
	RKResponseDescriptor *response = [RKResponseDescriptor responseDescriptorWithMapping:mapping
		Method:RKRequustMethodGet
		pathPattern:@"/messages.get"
		keyPath:@"responde"
		statusCodes:[NSIndexSet indexSetWithIndex:200]];
	[delegate.objectManager addResponseDescriptor response];
	
	[delegate.objectManager getObjectsAtPath:@"/messages.get"
		parameters:nil
		success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
			NSLog(@"success");
		} failure:^( RKObjectRequestOperation *operation, NSError *error) {
			NSString @msg = [NSString stringWithFormat:@"Ошибка %@", error.localizedDescription];
			NSLog(@"%@", msg);
		}
];
}

Приведенный выше код, выдает ошибку:
Loaded an unprocessable response (200) with content type 'application/jason'

Что я делаю не так??

С Уважением,
Александр.
  • Вопрос задан
  • 259 просмотров
Пригласить эксперта
Ответы на вопрос 1
@warranty_voider
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Message class]];

ресткит не генерирует маппинги сам, нужно явно указать ему, какое поле JSON маппить в какую пропертю объекта, это раз.
keyPath:@"responde"
опечатка?

"response" это массив, но в нем лежит больше одного типа объектов, поэтому нужен динамический маппинг (а лучше надавать по рукам тому, кто такое апи написал)

RKObjectMapping *messageMapping = [RKObjectMapping mappingForClass:[Message class]];
[messageMapping addAttributeMappingsFromDictionary:@{ @"ID": @"id", @"HEADER" : @"header" }];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы