使用 FS 读取字符串返回此错误:位置 0 处 JSON 中的意外标记 r
Posted
技术标签:
【中文标题】使用 FS 读取字符串返回此错误:位置 0 处 JSON 中的意外标记 r【英文标题】:Reading string with FS returns this Error: Unexpected token r in JSON at position 0 【发布时间】:2018-10-09 08:56:42 【问题描述】:我有一个字符串,不是一个对象,什么都没有,但是我需要获取该数据,而我能够获取该数据的唯一方法是使用内置节点的 FS 对 readFile 数据执行 JSON.parse模块。
fs.readdir('./Names', (err, files) =>
files.forEach(file =>
fs.readFile(`./Names/$file`, (err, data) =>
if (err) throw err;
var string = JSON.parse(data)
console.log(string)
)
);
)
这是我现在的代码。我有正确的所有数据,简要说明 fs.readdir 获取所有文件的名称,然后读取它们,但我在读取文件时遇到问题,因为它们不是对象,而且很难在没有脚本的情况下一次将大量 .txt 文件全部转换为对象,这会导致此问题。
有没有其他方法可以将对象的数据部分(NodeJS/JS 中的缓冲区)转换回可读的字符串?
【问题讨论】:
包含文件的内容会有所帮助,但错误很明显,您没有解析 JSON。当您未指定编码时,fs.readFile()
将在 data
中返回一个缓冲区,但如果您想要一个字符串,您可以指定编码(可能是 utf8
)或调用 data.toString('utf8')
【参考方案1】:
正如Patrick 提到的,返回的data
是缓冲区,因此您需要将其转换为字符串或让API 通过传递编码为您完成此操作,例如
fs.readdir('./Names', (err, files) =>
files.forEach(file =>
fs.readFile(`./Names/$file`, 'utf8', (err, data) =>
if (err) throw err;
// now uncomment this only if your data is JSON formatted
// var string = JSON.parse(data)
console.log(data)
)
);
)
参考:fs.readFile
【讨论】:
以上是关于使用 FS 读取字符串返回此错误:位置 0 处 JSON 中的意外标记 r的主要内容,如果未能解决你的问题,请参考以下文章