7

我在反序列化包含大双精度的 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用(小得多)的值替换,则测试按预期完成。

4

0 回答 0