2010-01-27 80 views
2

在我的項目中,我使用TouchJSON反序列化JSON字符串。結果是一個漂亮的NSDictionary。我想將本字典中的數據放入我的域對象/數據對象中。在反序列化JSON後將NSDictionary映射到域對象

有沒有很好的方法來做到這一點?一些最佳實踐?

也許最好保留NSDictionary並跳過域對象?

回答

1

這裏有兩種方法。將-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:方法會非常相似。

+0

我認爲initWithAttributes會做,但映射框架會更甜......謝謝! – Andi 2010-01-28 13:01:38

+0

@Andi:沒錯,但是有時候,當你只需要一些輕量級和快速的基礎知識時,一個框架是過分的。謝謝,羅伯!在初始化器中使用objectForKey:方法是一個好方法! – 2012-03-17 19:02:33

0

沒有內置的機制來做到這一點......並且我創建了一個小實用程序,它使用KVC隱喻將字典屬性映射到域對象。單調乏味且只有1個域級別較深。

我沒有試過呢,但谷歌幔看起來像它可能做的伎倆:

Google Mantle

它映射JSON,並從您的域模型。