こんにちは
例えば、APIが以下のような、18桁の整数値の id
を含むJSONを返すとします。
json
1{
2 "id": 100000000000000001
3}
このとき、APIのエンドポイントを url
として、単に以下
javascript
1fetch(url).then(res => res.json()).then(data => {
2 console.log(data.id);
3})
のようにすると、ご質問にあるように、JSONのid
と等しい整数値は得られず、最後の 1
が丸められて、 100000000000000000
と表示されてしまいます。
ですので、得られたJSONをパースする前に、18桁の数字の並びを "
でくくって、文字列として扱われるようにしてからパースします。具体的には以下です。
javascript
1fetch(url).then(res => res.text()).then(json => {
2 json = json.replace(/\d{18}/, id => `"${id}"` );
3 const data = JSON.parse(json);
4 console.log(data.id);
5})
上記によって、 "100000000000000001"
と表示されます。
(※上記のサンプルで、mockableに作った、テスト用のmock APIは、このご質問の解決後、削除します。ご了承ください)
以上、参考になれば幸いです。