Domanda

Sto usando JSONKit analizzare la stringa JSON in NSDictionary:

NSDictionary *deserializedData = [jsonString objectFromJSONString];

La mia domanda è: come posso cambiare i valori del dizionario e ottenere una cambiata JSON Stringa

?

ho cercato di modificare i valori del dizionario:

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

Ma l'applicazione si blocca in quella linea. Che cosa sto facendo di sbagliato?

Grazie in anticipo!

È stato utile?

Soluzione

Mentre le altre risposte sono corrette, quello che vuole veramente in questo caso è:

NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString];

Il metodo mutableObjectFromJSONString creerà direttamente un dizionario mutevole, che consente di risparmiare tempo e memoria.

Altri suggerimenti

NSDictionary è un dizionario immutabile, è necessario NSMutableDictionary per modificare i dati. Io non sono sicuro di JSONKit, ma il built-in Cocoa JSON parser ha una bandiera per restituire i dati in contenitori mutabili.

Nel peggiore dei casi, si può fare qualcosa di simile:

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);

Si tenta di modificare un immutableobject.

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

Questo è un dizionario mutabile ed è possibile modificare i valori in esso.

Si tenta in questo modo:

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

e quindi modificare i valori:

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

Per NSDictionary non possiamo aggiungere o modificare i valori, ecco perché l'applicazione si blocca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top