在我的項目中,我使用TouchJSON反序列化JSON字符串。結果是一個漂亮的NSDictionary。我想將本字典中的數據放入我的域對象/數據對象中。在反序列化JSON後將NSDictionary映射到域對象
有沒有很好的方法來做到這一點?一些最佳實踐?
也許最好保留NSDictionary並跳過域對象?
在我的項目中,我使用TouchJSON反序列化JSON字符串。結果是一個漂亮的NSDictionary。我想將本字典中的數據放入我的域對象/數據對象中。在反序列化JSON後將NSDictionary映射到域對象
有沒有很好的方法來做到這一點?一些最佳實踐?
也許最好保留NSDictionary並跳過域對象?
這裏有兩種方法。將-initWithJSONString:
方法添加到您的數據對象並將JSON直接傳遞給它們以進行分解,或者添加一個-initWithAttributes:
方法,該方法使用解析JSON時獲得的字典。例如:
- (id)initWithAttributes:(NSDictionary *)dict
{
// This is the complicated form, where you have your own designated
// initializer with a mandatory parameter, just to show the hardest problem.
// Our designated initializer in this example is "initWithIdentifier"
NSString *identifier = [dict objectForKey:MYIdentifierKey];
self = [self initWithIdentifier:identifier];
if (self != nil)
{
self.name = [dict objectForKey:MYNameKey];
self.title = [dict objectForKey:MYTitleKey];
}
return self;
}
創建-initWithJSONString:
方法會非常相似。
沒有內置的機制來做到這一點......並且我創建了一個小實用程序,它使用KVC隱喻將字典屬性映射到域對象。單調乏味且只有1個域級別較深。
我沒有試過呢,但谷歌幔看起來像它可能做的伎倆:
它映射JSON,並從您的域模型。
我認爲initWithAttributes會做,但映射框架會更甜......謝謝! – Andi 2010-01-28 13:01:38
@Andi:沒錯,但是有時候,當你只需要一些輕量級和快速的基礎知識時,一個框架是過分的。謝謝,羅伯!在初始化器中使用objectForKey:方法是一個好方法! – 2012-03-17 19:02:33