我已经设置了fetch()来使用他们的API从GotoWebinar中检索历史网络研讨会的详细信息。它返回一个JSON主体,包含以下结构,一个对象数组:
[{“webinarKey”:5653814518315977731,“webinarID”:“562189251”,“subject”:“样本网络研讨会”,“organizerKey”:1000000000331530},{“webinarKey”:9999814518315977731,“webinarID”:“99989251”,“subject”:“样本网络研讨会”,“organizerKey”:99900000003331530}]
我的代码正在Zapier操作(节点)中嵌入。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转换为字符串,但我不确定如何访问对象的所有元素。这在fetch响应中是可能的。
2条答案
按热度按时间sigwle7e1#
它与JavaScript中精度的位数有关。在JavaScript中,所有数字都存储为浮点数,这就像以2为基数而不是以10为基数的科学记数法。在
a * (2 ** b)
中,有固定数量的位(在本例中为53位)可用于表示a
。如果你看一下Number.MAX_SAFE_INTEGER
,可以用53位精度表示的最大整数,你会看到它有16个以10为底的数字。你的号码是19.如果您只是在JavaScript控制台中输入数字,您将看到它打印出四舍五入的版本(精度为16位)。如果需要存储这么大的数字,通常最好将它们存储为字符串。z9ju0rcb2#
这个问题很老了,但是当我搜索这个问题时出现了,所以我想我应该在这里留下答案。我也遇到了类似的问题(外部API我无法控制返回非常大的整数值作为ID),这些值被
json.parse
截断。我最终使用这个lossless-json NPM package来解决一个定制的数字解析器的问题,该解析器将大整数值转换为字符串。这对我来说已经足够了,因为我只需要引用作为ID。