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についてはわかりませんが、組み込みのCocoa 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);
ImmutableObjectを変更しようとします。
NSMutableDictionary *deserializedData = [NSMutableDictionary dictionaryWithDictionary: [jsonString objectFromJSONString]];
これは可変辞書であり、その値を変更できます。
あなたはこのように試みます:
NSMutableDictionary *deserializedData = [NSMutableDictionary dictionaryWithDictionary: [jsonString objectFromJSONString]];
次に、値を変更します。
[deserializedData setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"];
為に NSDictionary
値を追加または変更することはできません。そのため、アプリケーションがクラッシュしています。
所属していません StackOverflow