fetch() 响应截断大数字

fetch() response truncating big numbers

我有 fetch() 设置来使用他们的 API 从 GotoWebinar 检索历史网络研讨会详细信息。它 returns 一个 JSON 具有这种结构的主体,一个对象数组:

[{ "webinarKey":5653814518315977731, "webinarID":"562189251", "subject":"Sample Webinar", "organizerKey":100000000000331530 }, { "webinarKey":9999814518315977731, "webinarID":"999989251", "subject":"Sample Webinar", "organizerKey":999900000000331530 }]

我的代码正在 Zapier 操作中实现(node.js),重要的部分如下所示:

//Handle errors from fetch call
function handleFetchStatus(response){
    console.log('Fetch Response Status: ' + response.status);

    switch(response.status){
        case 200: //Request executed properly
            break;

        default:
            throw Error(response.status + ':' + JSON.stringify(response));
    }

    return response.json();

}

function handleFetchBody(oResponse){
    if (oResponse) {
        console.log('handleFetchBody: ' + JSON.stringify(oResponse));
    }

    callback(null, oResponse);
}


//Send POST request.
fetch(getFetchURL(), getFetchOptions())
    .then(handleFetchStatus)
    .then(handleFetchBody)
    .catch(function(error) {
        callback(error);
    });

我遇到的问题是 'webinarKey',一个很长的数字,被从“5653814518315977731”截断为“5653814518315978000”。我相信是 json() 函数没有处理大量数据。

我该如何阻止它?

我认为我需要在使用 json() 之前将 webinarKey 转换为字符串,但我不确定如何访问该对象的所有元素。在获取响应中甚至可能吗?

与JavaScript中的精度位数有关。在 JavaScript 中,所有数字都存储为浮点数,这就像以 2 为基数而不是以 10 为基数的科学记数法。有固定数量的位(在本例中为 53)可用于表示 aa * (2 ** b)。如果您查看 Number.MAX_SAFE_INTEGER,可以用 53 位精度表示的最大整数,您会看到它有 16 个以 10 为基数的数字。您的号码是 19。如果您只是将号码输入 JavaScript 控制台,您会看到它打印出四舍五入的版本(精度为 16 位)。如果您需要存储这么大的数字,通常最好将它们存储为字符串。