Axios에서 Bigint가 포함된 JSON 파싱하기
2019-02-24 13:53:28

자바스크립트의 숫자형의 범위는 아래와 같다.

1
2
console.log('최소범위', Math.pow(-2, 53) - 1); // -9007199254740992
console.log('최대범위', Math.pow(2, 53) - 1); // 9007199254740991

타사 API를 사용하던 중 UUID가 자료형의 범위를 넘기는 숫자가 들어온 적이 잇엇다.

검색을 해보니 json-bigint라는 모듈을 통해 해결을 하였다.

재현을 해보기 위해 파이썬의 플라스크로 가볍게 큰 숫자를 응답해주는 서버를 띄워보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from flask import Flask
import json
app = Flask(__name__)

@app.route('/')
def main():
data = {
"code": 200,
"message": "SUCEESS",
"value": 328381293434898918
}
jsonString = json.dumps(data)
return jsonString

if __name__ == '__main__':
app.debug = False
app.run(host='127.0.0.1', port=3000)

통상적으로 보낼 경우에는 아래와 같이 결과를 받을 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const axios = require('axios');

axios({
method: 'get',
url: 'http://localhost:3000'
}).then((response) => {
const result = response.data;
console.log(result);
/*
{
"code": 200,
"message": "SUCEESS",
"value": 328381293434898940
}
*/
}).catch((e) => {
console.log(e);
});

json-bigint를 사용해서 받아보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

const axios = require('axios');
const JSONbig = require('json-bigint');

axios({
method: 'get',
url: 'http://localhost:3000',
transformResponse: [function (data) {
return JSONbig.parse(data);
}]
}).then((response) => {
let data = response.data;
console.log('jp2', data.value.toString()); // jp2 328381293434898918

}).catch((e) => {
console.log(e);
});

참고

Prev
2019-02-24 13:53:28
Next