2012-02-16 51 views
1

我使用JSONKit解析JSON字符串的NSDictionary:JSONKit:改變和序列化JSON屬性的值

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

你試試這樣:

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

,然後改變其值:

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

對於NSDictionary我們不能添加或更改值,這就是爲什麼應用程序崩潰。

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);