JSONKIT:更改和序列化JSON属性的值
-
25-10-2019 - |
题
我正在使用JSONKIT将JSON字符串解析为nsdictionary:
NSDictionary *deserializedData = [jsonString objectFromJSONString];
我的问题是:如何更改字典值并获得更改的JSON字符串?
我试图更改字典值:
[deserializedData setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];
但是该应用在该行中崩溃。我究竟做错了什么?
提前致谢!
解决方案
虽然其他答案是正确的,但你什么 真的很想要 在这种情况下是:
NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString];
这 mutableObjectFromJSONString
方法将直接创建一个可变的词典,从而节省时间和内存。
其他提示
NSDictionary
是一本不变的词典,您需要 NSMutableDictionary
更改数据。我不确定JSONKIT,但是内置的可可JSON Parser有一个标志可以在可变容器中返回数据。
在最坏的情况下,您可以做这样的事情:
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);
您尝试更改一个不可变的对象。
NSMutableDictionary *deserializedData = [NSMutableDictionary dictionaryWithDictionary: [jsonString objectFromJSONString]];
这是一个可变的词典,您可以更改其中的值。
您尝试这样的尝试:
NSMutableDictionary *deserializedData = [NSMutableDictionary dictionaryWithDictionary: [jsonString objectFromJSONString]];
然后更改值:
[deserializedData setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];
为了 NSDictionary
我们无法添加或更改值,这就是为什么应用程序崩溃的原因。
不隶属于 StackOverflow