Javascript 中 JSON.parse 數字支援問題
在javascript中我們常常使JSON格式做資料交換,所以我們常常使用JSON.parse來把字串轉為物件再做使用,但是有一個問題會造成你轉出來的資訊會與你期望的產生差距,讓我們用一個簡單的範例來重現這個問題。
// 先宣告一個JSON字串 為了方便比較 我們一個用數字 一個用字串 let test = '{"number":9223372036854775807,"number_str":"9223372036854775807"}' // 使用JSON.parse解析 let obj = JSON.parse(test) // 結果 { number: 9223372036854776000, number_str: '9223372036854775807' } console.log(obj)
在此範例中以經把問題顯示出來,轉出來的數值竟然不等於輸入進去的數值,原因在於JavaScript 中 IEEE-754 雙精度範圍間的最大整數 (253– 1),你也可以在你的瀏覽器直接測試。
最常發生於我們請求回來的資料直接超出了範圍,我們可以透過安裝 json-bigint 來解析資料。
安裝json-bigint
npm i json-bigint
使用json-bigint
let test = '{"number":9223372036854775807,"number_str":"9223372036854775807"}' const JSONbig = require('json-bigint'); let obj2 = JSONbig.parse(test) // 9223372036854775807 console.log(obj2.number.toString()); // {"number":9223372036854775807,"number_str":"9223372036854775807"} console.log(JSONbig.stringify(obj2));
以上就是本次分享,喜歡歐斯瑞文章的讀者們,記得追蹤歐斯瑞粉絲團及Instagram,更別忘了訂閱我們的電子報,隨時掌握第一手新知分享呦!!若有任何問題,歡迎隨時聯絡我們!
我要留言