【发布时间】:2011-06-25 06:49:16
【问题描述】:
我正在尝试将 JSON 信息动态映射到不同的对象中。但是我不知道如何控制整个指针的情况,因为我希望不会起作用。
到目前为止,我的方法是为每个对象创建一个字典,将变量指针映射到等效的 JSON 键。在我的 JSON 映射器中,我有一个方法 parseJSONFromDictionary:withObject,它应该遍历 SBJSON 的 JSONValue 返回的字典,并将适当的值分配给给定对象中的适当变量。
-(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 目前处于 alpha 阶段。我希望能够轻松适应未来的任何变化,而无需重写许多代码行。我也想开始 DRY-ly 编程。我知道 JSON 解析非常重复,我想找到一种方法来减少开销。
感谢您的所有帮助!
编辑:我的问题似乎有些混乱。我不需要解析 JSON 的帮助。我已经在使用SBJSON。我不需要请求帮助,我已经在使用JDG's OAuthConsumer framework。我只能使用支持 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;
}
所以,如果您对如何将这些方法组合成一种方法有任何建议,请告诉我...
【问题讨论】:
-
我看过 Restkit。我不喜欢它的所作所为,而且我仍然不喜欢。在我的生活中,我从未见过比 RestKit 循环膨胀对象更完美的内存分配曲线。
标签: iphone objective-c json ios dry