如何将AxiosResponse响应对象转换为字符串打印查看
Axios响应对象转字符串打印的可行方法
方法1:使用JSON.stringify(通用,浏览器/Node环境均适用)
这是最通用的序列化方案,注意axios返回的完整响应对象r存在循环引用(比如r.request属性关联的请求对象会反向引用响应本身),直接序列化会抛错,需要加循环引用处理逻辑:
- 打印完整响应对象
r的代码:
const seen = new WeakSet(); // 第三个参数2表示按2空格缩进格式化输出,可读性更好 console.log(JSON.stringify(r, (key, value) => { if (typeof value === 'object' && value !== null) { if (seen.has(value)) return '[循环引用]'; seen.add(value); } return value; }, 2));
- 仅打印接口返回数据
r.data:
绝大多数场景下r.data是后端返回的纯JSON结构,不存在循环引用,直接序列化即可:
console.log(JSON.stringify(r.data, null, 2));
注意:
JSON.stringify会自动过滤值为undefined、函数、Symbol类型的属性,且无法正确序列化BigInt、Date等特殊类型,如果你需要查看这些属性,请选下面的方法。
方法2:Node环境使用内置util.inspect
如果你的代码跑在Node.js环境(比如后端服务、本地调试脚本),直接用内置的util模块的inspect方法即可,天生支持循环引用处理,还能自定义展示的嵌套深度,不会丢失非JSON类型的属性信息:
const util = require('util'); // depth设为null表示不限制嵌套展示层级 console.log(util.inspect(r, { depth: null, colors: false // 不需要控制台彩色输出的话可以关掉,纯文本更方便复制 })); // 打印r.data同理 console.log(util.inspect(r.data, { depth: null }));
额外注意事项
- 如果你的接口返回的是二进制数据(比如文件流、Blob、ArrayBuffer格式),不要直接转JSON字符串,先转成文本格式再打印:
// 比如Blob类型响应 const text = await r.data.text(); console.log(text); - 不要直接用
console.log(r)打印对象:不管是浏览器还是Node控制台,对对象类型的打印都是懒加载的——你在控制台展开对象的时候才会读取当前属性值,如果后续代码修改了对象属性,你看到的打印结果会和接口返回的当时值不一致,转成字符串打印可以完全规避这个问题。 - 如果只需要快速查看
r.data内容,浏览器环境也可以直接用console.dir(r.data, { depth: null }),控制台会展示完整嵌套结构,不需要手动转字符串。
内容的提问来源于stack exchange,提问作者user19251203
相关产品推荐
相关产品推荐

