Tôi đang cố gắng ánh xạ động thông tin JSON vào các đối tượng khác nhau. Nhưng tôi không thể hiểu được làm thế nào để có được toàn bộ tình trạng con trỏ dưới sự kiểm soát, như những gì tôi đã hy vọng sẽ làm việc không.Ánh xạ JSON mục tiêu-C DRY và tạo đối tượng
Cho đến nay phương pháp của tôi là tạo một từ điển cho từng đối tượng, ánh xạ các con trỏ biến tới các khóa JSON tương đương. Trong trình ánh xạ JSON của tôi, tôi có một phương thức, parseJSONFromDictionary:withObject
được cho là lặp qua từ điển được trả về bởi JSONValue của SBJSON và gán các giá trị thích hợp cho các biến thích hợp trong đối tượng đã cho.
-(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
là từ điển mà có các biến và các phím json, và dict
là những gì được trở về từ phân tích cú pháp JSON.
Vấn đề lớn là tôi không thể làm start.[self.mappings objectForKey:key]
. Tôi không biết nhiều về C, và rõ ràng là tôi không biết đủ về con trỏ, vậy làm thế nào tôi có thể tạo ra loại hệ thống này? Tôi biết đó không phải là cách đúng đắn để làm điều này, nhưng cách nào đúng? Tôi biết nó có thể được thực hiện, như RestKit hiện nó, nhưng họ không hỗ trợ OAuth vì vậy tôi thật không may không thể sử dụng khuôn khổ đáng yêu của họ.
Lý do tôi đi tuyến đường này là do API tôi đang làm việc hiện đang ở giai đoạn alpha. Tôi muốn có thể dễ dàng thích nghi với bất kỳ thay đổi nào trong tương lai mà không phải viết lại nhiều dòng mã. Tôi cũng muốn bắt đầu lập trình DRY-ly. Tôi biết phân tích cú pháp JSON rất lặp đi lặp lại và tôi muốn tìm cách giảm số tiền trên không.
Cảm ơn mọi sự giúp đỡ!
EDIT: Có vẻ như có một số nhầm lẫn về những gì tôi đang yêu cầu. Tôi không cần trợ giúp phân tích cú pháp JSON. Tôi đang sử dụng SBJSON rồi. Tôi không cần trợ giúp để đưa ra yêu cầu, tôi đã sử dụng JDG's OAuthConsumer framework. Tôi chỉ có thể sử dụng các khung hỗ trợ OAuth 2.0.
tôi làm cần sự giúp đỡ tìm hiểu làm thế nào để ngăn chặn này:
-(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;
}
Vì vậy, xin vui lòng cho tôi biết nếu bạn có bất kỳ đề xuất về cách kết hợp các loại phương pháp thành 1 phương pháp ...
Bạn đã xem https://github.com/RestKit/RestKit chưa? – Brenden
Tôi đã xem Restkit. Tôi không thích những gì nó đã làm, và tôi vẫn không. Không bao giờ trong cuộc sống của tôi có tôi nhìn thấy một đường cong phân bổ bộ nhớ hoàn hảo hơn so với RestKit thổi phồng các đối tượng trong một vòng lặp. – MishieMoo