【发布时间】:2013-08-01 20:06:49
【问题描述】:
当我尝试使用 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))
【问题讨论】:
-
您是否还记录了要转换为 JSON 的对象?
-
另外,验证失败后,您将继续序列化。
-
另外,请向我们展示
JSONRepresentation的代码。上面显示了JSONRepresentation:的代码,这是完全不同的。 -
是的,如果您改为拨打
JSONRepresentation:NO会怎样? -
虽然 Hot Licks 无疑是正确的,但顺便说一句,我也倾向于 (a) 将
result定义为NSData(因为这是dataWithJSONObject返回的内容); (b) 使用[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]而不是[NSString stringWithUTF8String:[result bytes]]。
标签: iphone ios json nsmutabledictionary nsjsonserialization