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?
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.
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);
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
}
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)
}
}
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];