2012-06-30 3 views
1

C'est le JSON provenant du serveur:ios parsing json contenant array?

{ 
    "name":"channelname", 
    "args": 
    [ 
     {   
      "username":"myusername", 
      "message":"mymessage" 
     } 
    ] 
} 

En utilisant iOS5 méthodes intégrées JSON je tente d'analyser les nom d'utilisateur/message args.

NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData: [packet.data dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: nil]; 
NSDictionary *argsValues = [[NSDictionary alloc] initWithDictionary:[JSON objectForKey:@"args"]]; 

deuxième ligne renvoie une erreur:

dictionary argument is not an NSDictionary 

Quand je NSLog [JSON objectForKey @ "args"] Je reçois:

(
    { 
     message = mymessage; 
     username = myusername; 
    } 
) 

Je pense que la parenthèse se casser, don Ne sais pas d'où ils viennent, aidez-les appréciés.

EDIT:

Merci à réponse choisie, voici le code que je l'habitude d'obtenir les clés args.

NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData: [packet.data dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableLeaves error: nil]; 
NSArray *argsArray = [[NSArray alloc] initWithArray:[JSON objectForKey:@"args"]]; 
NSDictionary *argsDict = [[NSDictionary alloc] initWithDictionary:[argsArray objectAtIndex:0]]; 
NSLog(@"keys = %@", [argsDict allKeys]); 

Répondre

2
[json objectForKey:@"args"] 

est un NSArray. Vous ne pouvez pas initialiser un NSDictionary directement avec un tableau.

(en JSON, et {} représentent les paires clé-valeur, comme NSDictionary, alors que délimitent [et] des listes ordonnées comme NSArray, voilà pourquoi le mappage est effectué comme il est ...)