Frage

Ich benutze JSONKIT, um JSON String in das Nsdictionary zu analysieren:

NSDictionary *deserializedData = [jsonString objectFromJSONString];

Meine Frage ist: Wie kann ich die Wörterbuchwerte ändern und eine veränderte JSON -Zeichenfolge erhalten?

Ich habe versucht, die Wörterbuchwerte zu ändern:

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

Aber die App stürzt in dieser Zeile ab. Was mache ich falsch?

Danke im Voraus!

War es hilfreich?

Lösung

Während die anderen Antworten korrekt sind, was Sie wirklich wollen In diesem Fall ist:

NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString];

Das mutableObjectFromJSONString Die Methode erzeugt direkt ein veränderliches Wörterbuch, das Zeit und Speicher spart.

Andere Tipps

NSDictionary ist ein unveränderliches Wörterbuch, Sie brauchen NSMutableDictionary Um die Daten zu ändern. Ich bin mir nicht sicher über Jsonkit, aber der eingebaute Kakao-Json-Parser hat eine Flagge, um die Daten in veränderlichen Containern zurückzugeben.

Im schlimmsten Fall können Sie so etwas tun:

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

Sie versuchen, ein unveränderliches Objekt zu ändern.

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

Dies ist ein veränderliches Wörterbuch und Sie können die darin enthaltenen Werte ändern.

Sie versuchen es so:

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

und dann die Werte ändern:

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

Zum NSDictionary Wir können Werte nicht hinzufügen oder ändern, deshalb stürzt die Anwendung ab.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top