使用 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的主要内容,如果未能解决你的问题,请参考以下文章

node--初步了解-03 从指定位置处开始写入文件

如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b

字符串方法总结

位置 0 处 JSON 中的意外标记 J

Fs 错误地读取或保存导致 NaN 的文件。如何处理?

Node.js中的fs 模块