Node.js中JSON格式化输出时如何将Buffer对象转为十六进制字符串
方案1:使用JSON.stringify的replacer参数(通用推荐)
JSON.stringify原生支持传入替换函数作为第二个参数,递归遍历对象所有属性时自动识别Buffer实例,转成十六进制字符串,直接满足美观打印需求:
const buf = Buffer.from("abcdefgh"); // 自定义替换逻辑 const bufferToHexReplacer = (key, value) => { // 匹配Buffer实例,返回十六进制字符串 if (value instanceof Buffer) { return value.toString('hex'); } // 兼容已经被序列化为{type:"Buffer", data: [...]}格式的普通对象 if (value && typeof value === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) { return Buffer.from(value.data).toString('hex'); } // 其余属性正常返回 return value; }; // 第三个参数4为缩进空格数,实现美观打印 console.log(JSON.stringify({a:1,b:2,c:{d:1,e:buf}}, bufferToHexReplacer, 4));
运行上述代码输出结果和要求的格式完全一致。
方案2:修改Node.js控制台默认打印逻辑
如果你不需要输出标准JSON字符串,只是在控制台直接打印对象时希望Buffer显示为十六进制,可以修改util.inspect的自定义渲染规则:
const util = require('util'); const buf = Buffer.from("abcdefgh"); // 全局修改Buffer的控制台展示格式 Buffer.prototype[util.inspect.custom] = function () { return `"${this.toString('hex')}"`; }; // 直接打印对象即可看到效果 console.log({a:1,b:2,c:{d:1,e:buf}});
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

