Firebase Cloud Function报BigInt无法编码错 对接Square API如何转BigInt为字符串
问题解决方法
报错原因:原生
JSON.stringify不支持序列化BigInt类型的值,碰到带n后缀的Bigint值就会抛出编码错误。
最简全局方案
直接在Firebase Cloud Function的入口代码最顶部添加以下代码,全局覆盖BigInt的序列化规则,一劳永逸解决所有BigInt序列化问题:
BigInt.prototype.toJSON = function () { // 也可以根据业务需求选择转成Number(仅当值不超过Number安全整数范围时用) return this.toString() }
添加后无需修改其他业务代码,后续所有JSON序列化操作都会自动把BigInt转成字符串格式。
无全局污染方案
如果不希望修改原型造成全局影响,可以在每次序列化返回数据时,给JSON.stringify传入自定义替换规则:
// 处理Square API返回的响应数据 const processedData = JSON.stringify(squareResponse, (key, value) => { return typeof value === 'bigint' ? value.toString() : value })
直接把处理后的processedData作为接口返回值即可。
常见补充说明
- 若后续需要把字符串格式的数值转回BigInt,直接调用
BigInt(字符串变量)即可,不会丢失精度 - 涉及金额类的BigInt字段不建议转普通Number,超出2^53-1范围的数值会丢失精度
内容的提问来源于stack exchange,提问作者Emmett Deen
相关产品推荐
相关产品推荐

