86 votes

Conversion de NSString en NSDictionary / JSON

J'ai les données suivantes sauvegardées sous la forme d'un fichier NSString :

 {
    Key = ID;
    Value =         {
        Content = 268;
        Type = Text;
    };
},
    {
    Key = ContractTemplateId;
    Value =         {
        Content = 65;
        Type = Text;
    };
},

Je souhaite convertir ces données en un NSDictionary contenant les paires clé-valeur.

J'essaie d'abord de convertir le NSString à un JSON comme suit :

 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

Cependant, lorsque j'essaie :

NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);

Je reçois la valeur suivante NULL .

Quelqu'un peut-il nous dire quel est le problème ?

265voto

Janak Nirmal Points 15980

Je pense que vous interprétez mal le format JSON pour les valeurs clés. Vous devriez stocker votre chaîne sous la forme

NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

Maintenant, si vous faites la déclaration NSLog suivante

NSLog(@"%@",[json objectForKey:@"ID"]);

Le résultat serait un autre NSDictionary.

{
    Content = 268;
    type = text;
}

J'espère que cela vous aidera à mieux comprendre.

14voto

RamsChowdary Points 517

Je pense que vous obtenez le tableau à partir de la réponse et que vous devez donc assigner la réponse à un tableau.

NSError \*err = nil;
NSArray \*array = \[NSJSONSerialization JSONObjectWithData:\[string dataUsingEncoding:NSUTF8StringEncoding\] options:NSJSONReadingMutableContainers error:&err\];
NSDictionary \*dictionary = \[array objectAtIndex:0\];  
NSString \*test = \[dictionary objectForKey:@"ID"\];  
NSLog(@"Test is %@",test);

6voto

Woodstock Points 3764

Utilisez ce code où str est votre chaîne JSON :

NSError *err = nil;
NSArray *arr = 
 [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:NSJSONReadingMutableContainers 
                                   error:&err];
// access the dictionaries
NSMutableDictionary *dict = arr[0];
for (NSMutableDictionary *dictionary in arr) {
  // do something using dictionary
}

2voto

Josh O'Connor Points 2524

Swift 3 :

if let jsonString = styleDictionary as? String {
    let objectData = jsonString.data(using: String.Encoding.utf8)
    do {
        let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers) 
        print(String(describing: json)) 

    } catch {
        // Handle error
        print(error)
    }
}

0voto

krish2me Points 9

Utilisez le code suivant pour obtenir l'objet de la réponse à partir de l'élément AFHTTPSessionManager vous pouvez alors convertir le type générique en type de données requis :

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X