fetch()响应截断大数字

时间:2017-08-17 02:54:08

标签: json node.js long-integer fetch-api truncated

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

[{     " webinarKey":5653814518315977731,     " webinarID":" 562189251&#34 ;,     "主题":"样本网络研讨会",     " organizerKey":100000000000331530 }, {     " webinarKey":9999814518315977731,     " webinarID":" 999989251&#34 ;,     "主题":"样本网络研讨会",     " 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变成一个字符串,但是我不确定如何访问该对象的所有元素。这在取回响应中是否可行。

1 个答案:

答案 0 :(得分:1)

它与JavaScript中的精度位数有关。在JavaScript中,所有数字都存储为浮点数,这类似于基数2中的科学记数法而不是基数10.在{{1}中可以使用固定数量的位(在这种情况下为53)来表示a }}。如果查看a * (2 ** b),可以用53位精度表示的最大整数,您将看到它有16个基数为10的数字。您的号码为19.如果您只是在JavaScript控制台中键入数字,您将看到它打印出圆形版本(精度为16位)。如果您需要存储如此大的数字,通常最好将它们存储为字符串。