我在反序列化包含大双精度的 JSON 时遇到了问题。基本上,我可以像这样序列化字典
NSDictionary *dict = @{@"doubleVal": @DBL_MAX};
序列化没有麻烦
{"doubleVal":1.797693134862316e+308}
但是,如果我尝试反序列化数据,它就会爆炸。
一个演示问题的小单元测试:
- (void)test_600_doubleJSON {
NSDictionary *dict = @{@"doubleVal": @DBL_MAX};
NSError *jsonError, *jsonResponseError;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict
options:0
error:&jsonError];
id jsonResponse = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&jsonResponseError];
STAssertNil(jsonError, @"JSON error: %@", jsonError.localizedDescription);
STAssertNil(jsonResponseError,
@"JSON response error: %@",
jsonResponseError.localizedDescription);
}
最后一个断言失败,原因如下:
JSON response error: The operation couldn’t be completed. (Cocoa error 3840.)
如果我DBL_MAX
用(小得多)的值替换,则测试按预期完成。