Jsonkit: изменение и сериализация ценности атрибута JSON
-
25-10-2019 - |
Вопрос
Я использую jsonkit, чтобы разобрать json String в Nsdictionary:
NSDictionary *deserializedData = [jsonString objectFromJSONString];
Мой вопрос: как я могу изменить значения словаря и получить измененную строку JSON?
Я пытался изменить словарь:
[deserializedData setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];
Но приложение сбивается в этой линии. Что я делаю не так?
Заранее спасибо!
Решение
Хотя другие ответы верны, что вы действительно хотите в этом случае:
NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString];
А mutableObjectFromJSONString
Метод создаст измененный словарь напрямую, который экономит время и память.
Другие советы
NSDictionary
Необходимый словарь, вам нужно NSMutableDictionary
Чтобы изменить данные. Я не уверен насчет Jsonkit, но встроенный анализатор какао JSON имеет флаг для возврата данных в изменяемых контейнерах.
В худшем случае вы можете сделать что -то подобное:
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
Мы не можем добавить или изменить значения, поэтому приложение сбивается.