2009-06-26 5 views
3

je un dictionnaire de dictionnaires qui est à moi est retourné au format JSONiPhone NSArray de Dictionnaire des valeurs Dictionnaire

{ 
    "neverstart": { 
     "color": 0, 
     "count": 0, 
     "uid": 32387, 
     "id": 73129, 
     "name": "neverstart" 
    }, 
    "dev": { 
     "color": 0, 
     "count": 1, 
     "uid": 32387, 
     "id": 72778, 
     "name": "dev" 
    }, 
    "iphone": { 
     "color": 0, 
     "count": 1, 
     "uid": 32387, 
     "id": 72777, 
     "name": "iphone" 
    } 
} 

J'ai aussi un NSArray contenant de l'identifiant requis pour un article. par exemple. [72777, 73129]

Ce que je dois être en mesure de faire est d'obtenir un dictionnaire de id => nom pour les éléments de la matrice. Je sais que c'est possible en itérant dans le tableau, puis en faisant défiler toutes les valeurs dans le dictionnaire et en vérifiant les valeurs, mais il semble qu'il devrait y avoir une méthode moins longue à faire. Excusez mon ignorance comme j'essaye juste de trouver mon chemin autour du SDK d'iPhone et apprendre l'objectif C et le cacao.

+0

Excuses pour ma réponse prématurée - J'ai voté pour le supprimer. Pouvez-vous préciser que vous avez déjà analysé le JSON dans une hiérarchie de NSDictionary? – teabot

+1

+1 Bonne question. J'ai rebaptisé ajouter "json" et changé "iphone" en "cacao" puisque cette question est plus généralement applicable. –

+0

Oui, j'ai déjà analysé le JSON dans la hiérarchie des NSDictionaries. C'est assez simple avec le framework json – Xetius

Répondre

5

Tout d'abord, puisque vous utilisez JSON, j'espère que vous avez déjà trouvé BSJSONAdditions et/ou json-framework, tous deux projets open-source pour l'analyse JSON dans les structures indigènes de cacao pour vous . This blog post donne une idée de la façon d'utiliser ce dernier pour obtenir un NSDictionary à partir d'une chaîne JSON.

Le problème consiste alors à trouver les valeurs correspondantes dans le dictionnaire. Je ne suis pas au courant d'une seule méthode qui fait ce que vous cherchez - les frameworks Cocoa sont assez puissants, mais sont conçus pour être très génériques et flexibles. Cependant, il ne devrait pas être trop difficile à mettre en place dans pas trop de lignes ... (Comme vous programmez sur iPhone, je vais utiliser l'énumération rapide pour rendre le code plus propre.)

NSDictionary* jsonDictionary = ... 
NSDictionary* innerDictionary; 
NSArray* requiredIDs = ... 
NSMutableDictionary* matches = [NSMutableDictionary dictionary]; 
for (id key in jsonDictionary) { 
    innerDictionary = [jsonDictionary objectForKey:key]; 
    if ([requiredIDs containsObject:[innerDictionary objectForKey:@"id"]]) 
     [matches setObject:[innerDictionary objectForKey:@"name"] 
        forKey:[innerDictionary objectForKey:@"id"]]; 
} 

Cette le code peut avoir des fautes de frappe, mais les concepts doivent être solides. Notez également que l'appel à [NSMutableDictionary dictionary] retournera un objet autoreleased.

2

Avez-vous essayé cette méthode NSDictionary:

+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys 
+0

Je ne demandais pas comment construire un dictionnaire, mais plutôt le meilleur moyen de filtrer un dictionnaire existant. – Xetius

0

Drew a obtenu la réponse ... J'ai trouvé que le GCC manual for the NSDictionary était utile d'une manière bare-bones l'autre jour quand j'avais une question similaire.

http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSDictionary.html

+2

Considérant qu'il programme sur l'iPhone, la consultation de la documentation d'Apple est une bien meilleure idée ... http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/ –