Sto provando a mappare dinamicamente le informazioni JSON in oggetti diversi. Ma non riesco a capire come tenere sotto controllo l'intera situazione del puntatore, in quanto ciò che speravo funzionasse non lo fosse.Objective-C DRY JSON Mapping e creazione di oggetti
Finora il mio metodo è stato quello di creare un dizionario per ogni oggetto, mappando i puntatori variabili alle chiavi JSON equivalenti. Nel mio mappatore JSON, ho un metodo, parseJSONFromDictionary:withObject
che deve scorrere il dizionario restituito dal valore JSONValue di SBJSON e assegnare i valori appropriati alle variabili appropriate nell'oggetto specificato.
-(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
è il dizionario che ha le variabili e le chiavi JSON, e il dict
è ciò che viene restituito dal parser JSON.
Il grosso problema è che non riesco a fare start.[self.mappings objectForKey:key]
. Non ne so molto di C, e chiaramente non ne so abbastanza dei puntatori, quindi come farei a creare questo tipo di sistema? So che non è il modo giusto per farlo, ma qual è la strada giusta? So che può essere fatto, come lo fa RestKit, ma non supportano OAuth, quindi purtroppo non posso usare il loro delizioso framework.
Il motivo per cui sto percorrendo questa rotta è perché l'API con cui sto lavorando è attualmente nella sua fase alpha. Voglio essere in grado di adattarmi facilmente a eventuali cambiamenti futuri senza dover riscrivere molte righe di codice. Voglio anche iniziare a programmare DRY-ly. So che l'analisi di JSON è molto ripetitiva e mi piacerebbe trovare un modo per ridurre la quantità di spese generali.
Grazie per qualsiasi aiuto!
EDIT: Sembra che ci sia una certa confusione su quello che sto chiedendo. I non hanno bisogno di aiuto per analizzare JSON. Sto già usando SBJSON. I non hanno bisogno di aiuto per effettuare richieste, sto già usando JDG's OAuthConsumer framework. I possono solo utilizzare framework che supportano OAuth 2.0.
ho bisogno di aiuto capire come prevenire questo:
-(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;
}
Quindi, per favore fatemi sapere se avete qualche suggerimento su come combinare questi tipi di metodi in 1 metodo ...
Hai consultato https://github.com/RestKit/RestKit? – Brenden
Avevo guardato il Restkit. Non mi è piaciuto quello che ha fatto, e ancora non lo faccio. Mai nella mia vita ho visto una curva di allocazione della memoria più perfetta di quella di RestKit che gonfia gli oggetti in un loop. – MishieMoo