首先用代碼來說明NSJSONReadingMutableContainers的作用:
1 NSString *str = @"{\"name\":\"kaixuan_166\"}"; 2 3 NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil]; 4 // 應用崩潰,不選用NSJSONReadingOptions,則返回的對象是不可變的,NSDictionary 5 [dict setObject:@"male" forKey:@"sex"]; 6 7 NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; 8 // 沒問題,使用NSJSONReadingMutableContainers,則返回的對象是可變的,NSMutableDictionary 9 [dict setObject:@"male" forKey:@"sex"]; 10 11 NSLog(@"%@", dict);
NSJSONReadingMutableContainers:返回可變容器,NSMutableDictionary或NSMutableArray。
NSJSONReadingMutableLeaves:返回的JSON對象中字符串的值為NSMutableString,目前在iOS 7上測試不好用,應該是個bug,參見:
http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working
NSJSONReadingAllowFragments:允許JSON字符串最外層既不是NSArray也不是NSDictionary,但必須是有效的JSON Fragment。例如使用這個選項可以解析 @“123” 這樣的字符串。參見:
http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading