当我尝试使用 NSJSONSerialization
将 NSMutableDictionary
转换为 JSON 时,它返回不同的结果:
代码:
-(NSString*)JSONRepresentation{
return [self JSONRepresentation:NO];
}
-(NSString*)JSONRepresentation:(BOOL)whiteSpaces{
NSError* error = nil;
NSData * result = nil;
if(whiteSpaces)
result = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
else
result = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:&error];
if (error != nil){
NSLog(@"Error:%@",error);
return nil;
}
return [NSString stringWithUTF8String:[result bytes]];
}
这就是我的使用方式:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxx" forKey:@"experiment"];
NSLog(@"(%@)", [dict JSONRepresentation]);
连续尝试的结果:
2013-08-01 12:31:45.066 Hercules Demo[8763:c07] ((null))
2013-08-01 12:31:49.988 Hercules Demo[8763:c07] ((null))
2013-08-01 12:31:52.838 Hercules Demo[8763:c07] ({"experiment":"xxx"})
2013-08-01 12:31:59.432 Hercules Demo[8763:c07] ({"experiment":"xxx"})
2013-08-01 12:32:03.160 Hercules Demo[8763:c07] ((null))
2013-08-01 12:32:06.232 Hercules Demo[8763:c07] ({"experiment":"xxx"})
2013-08-01 12:32:08.395 Hercules Demo[8763:c07] ((null))
最佳答案
dataWithJSONObject
方法返回 NSData
,所以我建议:
转换
NSData
进入NSString
,你应该使用initWithData
而不是stringWithUTF8String
。所以,而不是:return [NSString stringWithUTF8String:[result bytes]];
你应该这样做:
return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
为了清楚起见,您可能应该定义
result
成为NSData *
而不是id
.
关于iphone - 使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003540/