以下代码适用于 Node.js v14.16.0
。但是,我找不到任何文档表明 JSON.parse()
接受 Buffer
作为参数。这是预期的行为(尚未记录)还是我做错了什么?
const fs = require('fs');
const dataPayload = fs.readFileSync('data.json'); // a buffer
const data = JSON.parse(dataPayload);
console.log(data); // { name: 'Jane', age: 24 } -> an object
data.json
的内容:
{
"name": "Jane",
"age": 24
}
spec没有提到与此相关的任何内容。
最佳答案
它最终将 Buffer 转换为字符串,当您将对象传递给 JSON.parse(text [,reviver])
时,ECMAScript 规范中对此进行了描述。
ECMAScript spec JSON.parse()
包含第一步:
Let JText be ToString(text).
因此,第一步是获取传递给 JSON.parse(text)
的第一个参数,如果尚未将其转换为字符串。如果您想了解 ToString(text)
的工作原理,请参见 here in the spec .在这种情况下,Buffer 将是一个对象,因此它将遵循调用内部 ToPrimitive()
的路径,并使用字符串提示作为类型,然后调用内部 ToString()
在上面。
下面是一个在片段中运行的小示例,显示它在对象上使用 .toString()
方法:
let data = {
toString() {
console.log(`".toString()" method called`);
return "[1,2,3]"; // return some JSON
}
};
let test = JSON.parse(data);
console.log(`Is this an array: ${Array.isArray(test)}`);
console.log(`Array of length: ${test.length}`);
console.log(test);
关于javascript - JSON.parse() 是否接受 Buffer 作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66994023/