使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 会返回不同的结果
Posted
技术标签:
【中文标题】使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 会返回不同的结果【英文标题】:Converting NSMutableDictionary to JSON with NSJSONSerialization returns different results 【发布时间】: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]]
。
【参考方案1】:
dataWithJSONObject
方法返回一个NSData
,所以我建议:
要将NSData
转换为NSString
,您应该使用initWithData
而不是stringWithUTF8String
。所以,而不是:
return [NSString stringWithUTF8String:[result bytes]];
你应该这样做:
return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
为了清楚起见,您可能应该将result
定义为NSData *
而不是id
。
【讨论】:
以上是关于使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 会返回不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSJSONSerialization 将 NSDictionary 转换为 NSData
无法使用 NSJSONSerialization 将数字转换为 JSON 值
通过 NSJSONSerialization 下载 JSON 数据
NSJSONSerialization 拆箱 NSNumber?