You need to enable JavaScript to run this app. JSON.stringify输出空对象但错误对象实际非空,如何获取其真实内容?
优惠活动
大模型
产品
解决方案
定价
更多

JSON.stringify输出空对象但错误对象实际非空,如何获取其真实内容?

问题原因

JS内置的Error类型实例的核心属性(name、message、stack)都是不可枚举属性,JSON.stringify默认仅序列化对象的可枚举自有属性,所以直接序列化Error实例会得到空对象。

解决方案

以下三种方案可根据你的业务场景选择:

方法1:手动提取属性构造可序列化对象(最稳妥,无副作用)

直接把需要的错误字段提取到新对象中再序列化,不会对全局逻辑产生影响:

// 提取你需要的所有错误字段
const serializeErr = {
  name: err.name,
  message: err.message,
  stack: err.stack,
  // 如有自定义错误属性也可在此补充,比如错误码、状态码等
  code: err.code
}
// 序列化后即可正常通过axios发送
const errStr = JSON.stringify(serializeErr)

方法2:使用JSON.stringify的replacer参数指定序列化字段

不需要构造新对象,直接在序列化时指定要提取的属性即可:

const errStr = JSON.stringify(err, ['name', 'message', 'stack', 'code'])

方法3:给Error原型添加toJSON方法(全局生效,适合项目统一处理)

如果项目中多处需要序列化错误,可以全局注入toJSON逻辑,之后所有Error实例序列化都会自动包含核心属性:

if (!Error.prototype.toJSON) {
  Error.prototype.toJSON = function() {
    return {
      name: this.name,
      message: this.message,
      stack: this.stack,
      code: this.code
    }
  }
}
// 配置后直接序列化Error实例即可得到完整内容
const errStr = JSON.stringify(err)

注意:如果需要保留完整的错误调用栈信息,必须将stack属性加入序列化字段中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:09:03