NodeJS - 如何在使用 JSON.parse(JSON.stringify()) 后从缓冲区检索原始数据
NodeJS - How to retrieve original data from a Buffer after use JSON.parse(JSON.stringify())
我正在使用 crypto
库发送一个 POST 请求来更新一些数据,出于某种原因,我感觉好像我使用了 JSON.parse(JSON.stringify(myBufferData))
到 Buffer
数据。我想恢复原始数据
如何复制我的情况:
var buf = Buffer.from('abc');
var parsedBuf = JSON.parse(JSON.stringify(buf)); -> I faced with this result at some point.
buf.toString() -> Give the expected result ('abc').
parsedBuf.toString() -> Doesn't retrieve original data ('[object Object]').
如何从 parsedBuf
中检索原始数据?
解决方案
使用 Buffer(parsedBuf).toString()
而不是 parsedBuf.toString()
来检索原始数据。
说明
查看Buffer docs,我发现它的toString
方法不是Javascript的内置方法。您可以通过调用 buf.[method].toString()
在任何您想要的地方简单地检查它的来源。在这种情况下:
buf.toString.toString()
JSON.parse(JSON.stringify(buf)).toString.toString()
所以它以某种方式向我展示了他们的源代码:
// Buffer's toString method
function () {
let result;
if (arguments.length === 0) {
result = this.utf8Slice(0, this.length);
} else {
result = slowToString.apply(this, arguments);
}
if (result === undefined)
throw new Error('"toString()" failed');
return result;
}
// Javascript's built-in
function toString() { [native code] } // I haven't sought to find it out
事实证明,每当您执行 JSON.parse(JSON.stringify(buf))
时,您实际上是在将 Buffer 转换为 Javascript 对象。例如:
{ type: 'Buffer', data: [ 61, 62, 63] }
.
所以它上面的另一个 toString()
将 运行 native JS 函数(不是 Buffer 的)默认 returns [object Object]
.
我正在使用 crypto
库发送一个 POST 请求来更新一些数据,出于某种原因,我感觉好像我使用了 JSON.parse(JSON.stringify(myBufferData))
到 Buffer
数据。我想恢复原始数据
如何复制我的情况:
var buf = Buffer.from('abc');
var parsedBuf = JSON.parse(JSON.stringify(buf)); -> I faced with this result at some point.
buf.toString() -> Give the expected result ('abc').
parsedBuf.toString() -> Doesn't retrieve original data ('[object Object]').
如何从 parsedBuf
中检索原始数据?
解决方案
使用 Buffer(parsedBuf).toString()
而不是 parsedBuf.toString()
来检索原始数据。
说明
查看Buffer docs,我发现它的toString
方法不是Javascript的内置方法。您可以通过调用 buf.[method].toString()
在任何您想要的地方简单地检查它的来源。在这种情况下:
buf.toString.toString()
JSON.parse(JSON.stringify(buf)).toString.toString()
所以它以某种方式向我展示了他们的源代码:
// Buffer's toString method
function () {
let result;
if (arguments.length === 0) {
result = this.utf8Slice(0, this.length);
} else {
result = slowToString.apply(this, arguments);
}
if (result === undefined)
throw new Error('"toString()" failed');
return result;
}
// Javascript's built-in
function toString() { [native code] } // I haven't sought to find it out
事实证明,每当您执行 JSON.parse(JSON.stringify(buf))
时,您实际上是在将 Buffer 转换为 Javascript 对象。例如:
{ type: 'Buffer', data: [ 61, 62, 63] }
.
所以它上面的另一个 toString()
将 运行 native JS 函数(不是 Buffer 的)默认 returns [object Object]
.