1

我正在使用 JSONKit 将 JSON 字符串解析为 NSDictionary:

NSDictionary *deserializedData = [jsonString objectFromJSONString];

我的问题是:如何更改字典值并获取更改后的 JSON 字符串?

我试图改变字典值:

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

但该应用程序在该行崩溃。我究竟做错了什么?

提前致谢!

4

5 回答 5

5

虽然其他答案是正确的,但在这种情况下您真正想要的是:

NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString];

mutableObjectFromJSONString方法将直接创建一个可变字典,从而节省时间和内存。

于 2012-02-16T11:43:56.407 回答
2

NSDictionary是一个不可变的字典,你需要NSMutableDictionary改变数据。我不确定 JSONKit,但内置的 Cocoa JSON 解析器有一个标志来返回可变容器中的数据。

在最坏的情况下,您可以执行以下操作:

NSMutableDictionary* data = [NSMutableDictionary dictionaryWithDictionary:[jsonString objectFromJSONString]];
[data setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];
于 2012-02-16T09:37:21.130 回答
2
// 
// 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);
于 2012-05-31T03:06:20.327 回答
1

您尝试更改不可变对象。

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

这是一个可变字典,您可以更改其中的值。

于 2012-02-16T09:37:23.203 回答
1

你试试这样:

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

然后更改值:

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

因为NSDictionary我们无法添加或更改值,这就是应用程序崩溃的原因。

于 2012-02-16T09:49:25.200 回答