2012-02-16 3 views
1

JSON属性の値を変更し、シリアライズ私はNSDictionaryのにJSON文字列を解析するためにJSONKitを使用しています:はJSONKit:

NSDictionary *deserializedData = [jsonString objectFromJSONString]; 

私の質問は:どのように私は辞書の値を変更し、変更されたJSON文字列を取得することができますか?

私は辞書の値に変更しようとしました:

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

しかし、そのラインでアプリがクラッシュしました。私は間違って何をしていますか?

ありがとうございます!

答えて

5

、何が本当にこのケースでたいのは次のとおりです。

NSMutableDictionary *deserializedData = [jsonString mutableObjectFromJSONString]; 

mutableObjectFromJSONString方法は直接可変辞書を作成し、時間とメモリを節約します。

2

NSDictionaryは不変の辞書です。データを変更するにはNSMutableDictionaryが必要です。私はJSONKitについてはわかりませんが、組み込みのCocoa JSONパーサには、変更可能なコンテナ内のデータを返すフラグがあります。

最悪の場合、あなたはそのような何かを行うことができます。

NSMutableDictionary* data = [NSMutableDictionary dictionaryWithDictionary:[jsonString objectFromJSONString]]; 
[data setObject:[NSNumber numberWithInt:iRatings] forKey:@"ratings"]; 
1

あなたがimmutableobjectを変更してみてください。

これは変更可能な辞書であり、その中の値を変更することができます。

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

、その後の値に変更します:あなたはこのようにしてみてください

1

アプリケーションがクラッシュしている理由

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

NSDictionaryのために、我々は値を追加または変更することはできませんが、thatsの。他の回答が正しいですが

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); 
関連する問題