繁体   English   中英

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

[英]Does JSON.parse() accepts a Buffer as argument?

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

规范没有提及与此相关的任何内容。

它最终将 Buffer 转换为字符串,当您将 Object 传递给JSON.parse(text [,reviver])时,ECMAScript 规范中对此进行了描述。

JSON.parse()ECMAScript 规范包含以下第一步:

Let JText be ToString(text).

因此,第一步是获取传递给JSON.parse(text)的第一个参数,如果还没有,则将其转换为字符串。 如果您想了解ToString(text)的工作原理,请参阅规范中的此处描述。 在这种情况下,缓冲区将是 Object,因此它将遵循调用内部ToPrimitive()并带有字符串提示的路径作为类型,然后在其上调用内部ToString()


这是一个在片段中运行的小示例,表明它在 object 上使用.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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM