NSLSONSerialization在DBL_MAX上失败

sha*_*naw 7 parsing json ios

我遇到了包含大型double的JSON反序列化的问题.基本上,我可以序列化这样的字典

NSDictionary *dict = @{@"doubleVal": @DBL_MAX};
Run Code Online (Sandbox Code Playgroud)

哪个序列化没有麻烦

{"doubleVal":1.797693134862316e+308}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试对数据进行反序列化,它就会爆炸.

一个小单元测试,演示了这个问题:

- (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);
}
Run Code Online (Sandbox Code Playgroud)

最后一个断言失败,如下:

JSON response error: The operation couldn’t be completed. (Cocoa error 3840.)
Run Code Online (Sandbox Code Playgroud)

如果我DBL_MAX用(更大)更小的值替换,则测试按预期完成.