Я пытаюсь динамически отобразить информацию JSON в разные объекты. Но я не могу понять, как полностью контролировать ситуацию с указателем, потому что то, что я надеялся, сработало бы.
До сих пор моя методология заключалась в том, чтобы создать словарь для каждого объекта, сопоставляя указатели переменных с эквивалентными ключами JSON. В моем преобразователе JSON у меня есть метод parseJSONFromDictionary:withObject
, который должен перебирать словарь, возвращаемый JSONValue SBJSON , и назначать соответствующие значения соответствующим переменным в данном объекте.
-(NSObject *)parseJSONFromDictionary:(NSDictionary *)dict withObject:(NSObject *)start{
for (NSString *key in dict) {
if ([[self.mappings objectForKey:key] isMemberOfClass:[NSString class]]) {
start.[self.mappings objectForKey:key] = [[dict valueForKey:key] stringValue];
}
}
return start;
}
mappings
- это словарь, содержащий переменные и ключи json, а dict
- это то, что возвращается из анализатора json.
Большая проблема в том, что я не могу сделать start.[self.mappings objectForKey:key]
. Я не знаю много о C, и, очевидно, я не знаю достаточно об указателях, так как бы я пошел о создании такой системы? Я знаю, что это не правильный способ сделать это, но каков правильный путь? Я знаю, что это можно сделать, как это делает RestKit , но они не поддерживают OAuth, поэтому я, к сожалению, не могу использовать их прекрасные фреймворки.
Причина, по которой я иду по этому пути, заключается в том, что API, с которым я работаю, в настоящее время находится на стадии альфа. Я хочу иметь возможность легко адаптироваться к любым будущим изменениям без необходимости переписывать много строк кода. Я также хочу начать программирование. Я знаю, что разбор JSON очень повторяется, и я хотел бы найти способ уменьшить количество служебных данных.
Спасибо за любую помощь!
РЕДАКТИРОВАТЬ: Кажется, есть некоторая путаница относительно того, что я спрашиваю. Мне не нужна помощь в разборе JSON. Я уже использую SBJSON . Мне не нужна помощь при отправке запросов, я уже использую ODuthConsumer Framework JDG . Я могу только использовать фреймворки, поддерживающие OAuth 2.0.
Мне нужна помощь выяснить, как предотвратить это:
-(Class1 *)parseJsonForClass1:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class1 *instance1 = [self mapObjectsForClass1From:outputDict];
return instance1;
}
-(Class2 *)parseJsonForClass2:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class2 *instance2 = [self mapObjectsForClass2From:outputDict];
return instance2;
}
-(Class3 *)parseJsonForClass3:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class2 *instance3 = [self mapObjectsForClass3From:outputDict];
return instance3;
}
-(Class1 *)mapObjectsForClass1From:(NSDictionary *)dict {
Class1 *object1 = [[Class1 alloc] init];
object1.name = [[dict valueForKey:@"name"] stringValue];
object1.date = [[dict valueForKey:@"date"] stringValue];
object1.objId = [[dict valueForKey:@"id"] intValue];
return object1;
}
-(Class2 *)mapObjectsForClass2From:(NSDictionary *)dict {
Class2 *object2 = [[Class2 alloc] init];
object2.something = [[dict valueForKey:@"something"] stringValue];
object2.title = [[dict valueForKey:@"title"] stringValue];
object2.imageUrl = [[dict valueForKey:@"image_url"] stringValue];
return object2;
}
-(Class3 *)mapObjectsForClass3From:(NSDictionary *)dict {
Class3 *object3 = [[Class3 alloc] init];
object3.foo = [[dict valueForKey:@"bar"] stringValue];
object3.flag = [[dict valueForKey:@"is_member"] boolValue];
object3.obj1 = [[Class1 alloc] init];
object3.obj1 = [self mapOjectsForClass1From:[dict objectForKey:@"name1"]];
return object3;
}
Поэтому, пожалуйста, дайте мне знать, если у вас есть предложения о том, как объединить эти виды методов в 1 метод ...