gpt4 book ai didi

javascript - JSON.parse() 是否接受 Buffer 作为参数?

转载 作者:行者123 更新时间:2023-12-05 06:02:12 25 4
gpt4 key购买 nike

以下代码适用于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com