2010-01-27 41 views
2

Dans mon projet, j'utilise TouchJSON pour désérialiser une chaîne JSON. Le résultat est un joli NSDictionary. Je voudrais obtenir les données dans ce dictionnaire dans mes objets de domaine/objets de données.Mapper NSDictionary aux objets de domaine après la désérialisation de JSON

Existe-t-il un bon moyen de le faire? Quelques bonnes pratiques?

Peut-être le meilleur pour garder le NSDictionary et ignorer les objets de domaine?

Répondre

1

Il existe deux approches ici. Ajoutez une méthode -initWithJSONString: à vos objets de données et transmettez-leur le JSON directement pour la décomposition, ou ajoutez une méthode -initWithAttributes: qui prend un dictionnaire obtenu à partir de l'analyse du JSON. Par exemple:

- (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; 
} 

Création d'une méthode -initWithJSONString: serait très similaire.

+0

Je pense que le initWithAttributes fera l'affaire, mais un framework de cartographie serait plus doux ... Merci! – Andi

+0

@Andi: C'est vrai, mais parfois, un framework est trop lourd quand vous avez juste besoin de quelque chose de léger et rapide pour couvrir les bases. Merci, Rob! Utiliser la méthode objectForKey: dans un initialiseur est une excellente façon de procéder! –

0

Il n'y a aucun mécanisme intégré pour cela ... et j'ai créé un petit utilitaire qui utilise une métaphore KVC, pour mapper des attributs de dictionnaire à un objet de domaine .. fastidieux et seulement 1 niveau de profondeur du domaine.

Je ne l'ai pas encore essayé, mais Google Mantle semble que cela pourrait faire l'affaire:

Google Mantle

Il cartes JSON et de votre modèle de domaine.