2010-04-13 2 views
6

Pour mon application iPhone, je consomme un service RESTful et j'obtiens JSON. J'ai trouvé des bibliothèques pour désérialiser cela dans un NSDictionary. Cependant, je me demande s'il existe des bibliothèques pour désérialiser la liste JSON/NSDictionary/Property dans mon objet (un arbitraire de mon côté).Object mapping dans l'objectif-c (iphone) de JSON

L'équivalent Java serait les mappeurs relationnels d'objet bien que le type de mappage d'objet que je recherche soit relativement simple (types de données simples, pas de relations complexes, etc.). J'ai remarqué que Objective-C avait une introspection donc cela semble théoriquement possible mais je n'ai pas trouvé de bibliothèque pour le faire.

Ou existe-t-il un moyen simple de charger un objet à partir d'un objet NSDictionary/Property List qui ne nécessite pas de modification à chaque fois que l'objet change?

Par exemple:

{ "id" : "user1", 
    "name" : "mister foobar" 
    "age" : 20 } 

est chargé en objet

@interface User : NSObject { 
NSString *id; 
NSString *name; 
int *age; 
} 
+0

n'a pas le symbole astérisque parce qu'il est un entier –

Répondre

5

Jetez un coup d'oeil au protocole NSKeyValueCoding. En particulier, les méthodes setValuesForKeysWithDictionary: et dictionaryWithValuesForKeys:

+0

impressionnant. Merci paull. Je ne savais pas que NSObject supportait ce type de protocole. Je peux écrire mon propre mapper simple maintenant. – pschang

1

Jetez un oeil au projet Loid sur Sourceforge. Mon intention est de fournir ce dont vous parlez.

Actuellement, le framework peut effectuer une ingénierie inverse d'une description Meta sur un objet (tel que votre objet "User") et peut être sérialisé vers et depuis un objet LoidTypeData. Mon intention est de créer une instance de LoidTypeData à partir d'un bloc JSON entrant, puis de la lier à l'objet. Bien sûr, l'inverse sera également là.

Il est open source et GPL. Vous aurez besoin d'accéder au code de SVN pour le moment, vous ne savez pas comment construire une distribution pour Mac.

- Frank

Questions connexes