You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js读取JSON文件BigInt字段报类型转换错误的解决方法

报错原因

JSON.parse的reviver回调会按从内到外的顺序遍历解析生成的所有节点值:最先遍历到最内层的基础类型值,之后会遍历组装完成的对象、数组,最后还会遍历到最外层的根节点。
你写的reviver没有做任何类型判断,对所有传入的值都直接调用BigInt()做转换:当遍历到对象/数组类型的值时,BigInt()无法将对象类型转为大整数,就会抛出Cannot convert [object Object] to a BigInt的错误。

修正方案

在reviver回调中增加类型判断,仅对数字类型的值执行BigInt转换,对象、数组等其他类型的值直接原样返回即可。
修正后的完整代码:

const fs = require("fs");

function reviver(key, value) {
  if (typeof value === "number") {
    return BigInt(value);
  }
  return value;
}

let rawdata = fs.readFileSync("input.json");
let numbers = JSON.parse(rawdata, reviver);

console.log(numbers);

执行node div.js即可得到正确输出:

[
  { number: 19819n, divisor: 34n },
  { number: 888n, divisor: 19n },
  { number: 55555n, divisor: 126n }
]

注意:如果你的JSON中存在超过JS安全整数范围(2^53-1)的超大数字,上述方案会有精度损失——因为JSON.parse默认将数字解析为Number类型时就已经丢失精度,这类场景需要先对JSON原始文本做正则匹配处理,再做解析转换。你当前测试用例中的数字都在安全整数范围内,上述方案可以正常工作。

内容的提问来源于stack exchange,提问作者OrenIshShalom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:39:32