2010-01-27 1 views
2

В моем проекте я использую TouchJSON для десериализации строки JSON. В результате получается довольно NSDictionary. Я хотел бы получить данные в этом словаре в своих объектах/объектах домена.Карта NSDictionary для объектов домена после десериализации JSON

Есть ли хороший способ сделать это? Некоторые лучшие практики?

Возможно, лучше всего сохранить 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

+0

@ Andi: Правда, но иногда, каркас излишне, когда вам просто нужно что-то легкое и быстрое, чтобы осветить основы. Спасибо, Роб! Использование метода objectForKey: в инициализаторе - отличный способ! –

0

Для этого не существует встроенного механизма ... и я создал небольшую утилиту, которая использует метафору KVC, чтобы сопоставить словарные атрибуты объекту домена .. утомительный и только 1 уровень домена.

Я не пробовал этого, но Google Мантия выглядит, как это может сделать трюк:

Google Mantle

Он отображает JSON и из вашей модели домена.