Axios에서 Bigint가 포함된 JSON 파싱하기
2019-02-24 13:53:28
# Node.js
자바스크립트의 숫자형의 범위는 아래와 같다.
1 2
| console.log('최소범위', Math.pow(-2, 53) - 1); console.log('최대범위', Math.pow(2, 53) - 1);
|
타사 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);
}).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()); }).catch((e) => { console.log(e); });
|
참고