Node.js中JSON.parse解析Buffer JSON为何不生成Buffer实例?是否正常?
是的,这是JSON.parse的正常预期行为
JSON本身没有定义Buffer这种二进制类型,它只支持字符串、数字、布尔值、null、对象和数组这些基础类型。所以JSON.parse处理Buffer的JSON字符串时,只会把它解析成一个普通的JavaScript对象——也就是包含type和data属性的对象,而不会自动转换成Node.js的Buffer实例。
看你提供的代码示例:
let parseBuf = JSON.parse('{"type":"Buffer","data":[146,247,204,173,154,172,70,6,147,130,219,222,4,69,161,74]}'); let bufferBuf = Buffer.from(parseBuf.data); console.log(parseBuf instanceof Buffer) console.log(bufferBuf instanceof Buffer) console.log(JSON.stringify(parseBuf)) console.log(JSON.stringify(bufferBuf))
对应的控制台输出:
false true {"type":"Buffer","data":[146,247,204,173,154,172,70,6,147,130,219,222,4,69,161,74]} {"type":"Buffer","data":[146,247,204,173,154,172,70,6,147,130,219,222,4,69,161,74]}
这里的逻辑很清楚:
parseBuf是JSON.parse生成的普通对象,所以instanceof Buffer返回false- 调用
Buffer.from(parseBuf.data)把数组转成Buffer实例,所以bufferBuf instanceof Buffer返回true - 而
JSON.stringify处理Buffer时,Node.js会自动把它序列化成{type: "Buffer", data: [...]}格式的对象,所以两次输出的JSON字符串完全一致
如果要把这种JSON字符串转回Buffer,除了用Buffer.from(parseBuf.data),还可以直接传入整个解析后的对象:Buffer.from(parseBuf),Node.js会识别这种格式的对象并正确转换成Buffer实例。
内容的提问来源于stack exchange,提问作者Beraben Systems
相关产品推荐
相关产品推荐

