![](/img/trans.png)
[英]Does JavaScript's JSON.Parse() function have a max string length limit for the parameter it accepts?
[英]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.