Question

J'utilise JSONKit pour analyser la chaîne JSON en NSDictionary:

NSDictionary *deserializedData = [jsonString objectFromJSONString];

Ma question est: comment puis-je modifier les valeurs du dictionnaire et obtenir une chaîne JSON changé

?

J'ai essayé de changer les valeurs du dictionnaire:

[deserializedData setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];   

Mais l'application se bloque dans cette ligne. Qu'est-ce que je fais mal?

Merci à l'avance!

Était-ce utile?

La solution

Alors que les autres réponses sont correctes, ce que vous voulez vraiment dans ce cas est:

NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString];

La méthode mutableObjectFromJSONString va créer un dictionnaire mutable directement, ce qui fait gagner du temps et de la mémoire.

Autres conseils

NSDictionary est un dictionnaire immuable, vous avez besoin NSMutableDictionary de modifier les données. Je ne suis pas sûr de JSONKit, mais intégré dans l'analyseur Cocoa JSON a un drapeau pour renvoyer les données dans des conteneurs mutables.

Dans le pire des cas, vous pouvez faire quelque chose comme ça:

NSMutableDictionary* data = [NSMutableDictionary dictionaryWithDictionary:[jsonString objectFromJSONString]];
[data setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];
// 
// we begin with our string in json format
//
NSString *jsonString = [[NSString alloc] initWithString:@"{\"1\":\"Hole 1: Rossy Robinson - $25\",\"2\":\"Hole 7: Davey Ambrose - $25\",\"3\":\"Hole 14: Ross Robinson - $25\"}"];

//
// convert the json string to an NSMutableDictionary
//
NSError *e;
NSMutableDictionary *JSONdic = [NSJSONSerialization JSONObjectWithData: [jsonString dataUsingEncoding: NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: &e];

//
// change a value and add a new value in the dict
//
NSLog(@"before: object for key 1 is: %@", [JSONdic objectForKey:@"1"]);
[JSONdic setObject:@"xxx" forKey:@"1"];
[JSONdic setObject:@"Phil McQuitty" forKey:@"2"];

//
//convert dictionary object to json data
//
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:JSONdic options:NSJSONWritingPrettyPrinted error:&e];

//
// convert the json data back to a string
//
NSString *jsonText = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];\

//
// print out the final results
//
NSLog(@"back to string: %@", jsonText);

Vous essayez de changer un immutableobject.

NSMutableDictionary *deserializedData = [NSMutableDictionary dictionaryWithDictionary: [jsonString objectFromJSONString]];

Ceci est un dictionnaire mutable et vous pouvez modifier les valeurs en elle.

Vous essayez comme ceci:

NSMutableDictionary *deserializedData = [NSMutableDictionary dictionaryWithDictionary: [jsonString objectFromJSONString]];

puis modifiez les valeurs suivantes:

[deserializedData setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];   

Pour NSDictionary nous ne pouvons pas ajouter ou modifier des valeurs, c'est pourquoi l'application se bloque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top