web-dev-qa-db-fra.com

Conversion de NSString en NSDictionary / JSON

J'ai les données suivantes enregistrées en tant que NSString:

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

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

J'essaie d'abord de convertir les objets NSString en objets JSON comme suit:

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

Cependant quand j'essaye:

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

Je reçois la valeur sous la forme NULL.

Quelqu'un peut-il suggérer quel est le problème?

79
GuybrushThreepwood

Je crois que vous interprétez mal le format JSON pour les valeurs clés. Vous devriez stocker votre chaîne comme

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 suivez l'instruction NSLog

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

Le résultat serait un autre NSDictionary.

{
    Content = 268;
    type = text;
}

J'espère que cela aide à bien comprendre.

249
Janak Nirmal

Je pense que vous obtenez le tableau de la réponse, vous devez donc affecter une réponse à un tableau.

NSError * err = nil; 
 NSArray * array = [NSJSONSerialization JSONObjectWithData: [string dataUsingEncoding: NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: & err]; 
 NSDictionary *
NSString * test = [dictionnaire objetForKey: @ "ID"];
NSLog (@ "Test is% @", test);
14
MobileDev

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
}
6
Woodstock

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)
    }
}
1
Josh O'Connor

Utilisez le code suivant pour obtenir l'objet de réponse du bloc d'échec AFHTTPSessionManager. alors vous pouvez convertir le type générique dans le type de données requis:

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