2011-06-08 8 views
0

Je reçois json d'un service web dans un NSMutableData.iphone objectif-c: conversion chaîne à NSData pour désérialisation json

Cela est converti en un NSDictionary en utilisant TouchJson.

NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:responseData error:&error]; 
NSString *strData = [dictionary objectForKey:@"cars"]; 

Je récupère alors une chaîne à partir d'une clé de ce dictionnaire.

La chaîne ressemble ci-dessous

 { 
     b = "http://schemas.datacontract.org/"; 
     car =  (
        { 
       "car_name" = "Honda Civic"; 
       year = 2011; 
       "dealer" = "local honda dealer"; 
       "bought on" = { 
        nil = 1; 
       }; 
       "license_number" = 1234567; 
       status = ReadyToGo; 
      } 
)}; 

Essentiellement, il peut être « n » enregistrements contre la touche « voiture ».

lorsque je tente de convertir le dessus NSData en utilisant

NSData *jsonData = [strData dataUsingEncoding:NSUTF8StringEncoding]; 

et aussi

NSData *jsonData = [strData dataUsingEncoding:[NSString defaultCStringEncoding]]; 

mais je reçois

[__NSCFDictionary dataUsingEncoding:]: unrecognized selector sent to instance 0x532bb70 

J'ai essayé quelques autres encodages disponibles et Xcode encore vomi.

Comment puis-je déterminer l'encodage utilisé?

Ceci est ma première tentative de déseralisation de json dans l'objectif-c.

Qu'est-ce que je manque/fais mal ici?

Merci

Répondre

1

Je pense que ce n'est pas une chaîne du tout ....

changement à ce et essai ....

NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:responseData error:&error]; 
NSDictionary *carsDictionary = [dictionary objectForKey:@"cars"]; 
NSArray *arrayOfCarDictionaries = [carsDictionary objectForKey:@"car"]; 
+0

Je livrerai qu'un essai. J'allais plus tard convertir le NSData dans un autre dictionnaire et retirer la valeur de la clé 'voiture', puis la désérialiser en utilisant touchjson. Est-ce la mauvaise façon de s'y prendre? –

+0

Oui, le désérialiseur json fonctionne sur les objets et les sous-objets, donc ils sont déjà correctement décodés. Tous les objets et sous-objets doivent être des dictionnaires, des tableaux ou des paires clé/valeur. – NWCoder

+0

Cela a fonctionné !!!. Merci. Premièrement, je pensais que je devrais lui donner des morceaux spécifiques à désérialiser. Deuxièmement ce qui m'a fait trébucher, c'est que ce qui suit a fonctionné: NSString * strData = [dictionnaire objectForKey: @ "cars"]; NSLog (@ "voitures:% @", strData); ce qui m'a donné l'impression que je recevais une chaîne pour cette clé. –