2017-08-17 7 views
0

私は、APIを使ってGotoWebinarから履歴ウェブセミナーの詳細を取得するためのfetch()これは、このような構造を持つオブジェクトの配列をJSON体を返す:大きな数字を切り捨てるfetch()レスポンス

[{ "webinarKey":5653814518315977731、 "webinarID": "562189251"、 "対象": "サンプルウェビナー"、 "organizerKey" :100000000000331530 }、 { "webinarKey":9999814518315977731、 "webinarID": "999989251"、 "対象": "サンプルウェビナー"、 "organizerKey" 999900000000331530 }]

マイコードがされていますZapierアクション(node.js)と重要なビットlこのようなooks:

//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」、長い数は、「5653814518315978000」に「5653814518315977731」から切り捨てされていることです。私はそれがjson()関数だと信じています。

どうすればいいですか?

json()を使用する前にwebinarKeyを文字列にする必要があると思いますが、オブジェクトのすべての要素にアクセスする方法がわかりません。フェッチレスポンスでも可能ですか?

答えて

1

JavaScriptの精度の桁数と関係があります。 JavaScriptでは、すべての数値は浮動小数点として格納されます。これは、基数10ではなく、基数2の科学表記に似ています。aを表すために使用できる固定数のビット(この場合は53)がa * (2 ** b)にあります。 Number.MAX_SAFE_INTEGER、53ビットの精度で表現できる最大の整数を見ると、16の10進数を持つことがわかります。あなたの番号は19です。JavaScriptコンソールに数字を入力するだけで、16桁の精度で丸められたバージョンが印刷されます。このような大きな数を格納する必要がある場合は、通常は文字列として格納することをお勧めします。

+0

大きな数値を格納することはできず、文字列に変換する必要があることを理解します。しかし、API呼び出しは、私が制御できない形式の応答本文を返します。だから、どのようにレスポンスボディの要素にアクセスすることができますか?そのため、それらを.json()に渡す前に文字列に変換することができますか? –

+0

レスポンスをテキスト( 'response.json()'の代わりに 'response.text()')として解析すると 'text.replace(/(" [^ "] *" \ s *:\ s *)(\ d {16、})/ g、 '$ 1 "$ 2"') 'この文字列を' JSON.parse() 'に渡すことができます。 – csander

+0

ありがとう私はそれを文字列解析しないことを望んでいましたが、それは唯一の方法だと思われます。 –

関連する問題