解析"...没有方法'替换'时出现JSON错误"

cli*_*xby 2 javascript json fs node.js javascript-objects

让我先说明我是一个完整的编程和javascript noob,这个事实是我麻烦的根源.

我正在尝试使用json.stringify从我保存到的文本文件中填充大量自定义对象.当我抓取文件内容和json.parse(他们)时,我收到以下错误:

var backSlashRemoved = text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'
                            ^
TypeError: Object (contents of file) has no method 'replace'
Run Code Online (Sandbox Code Playgroud)

导致此错误的代码是:

fs.readFile('/savedcustomobjectarray', function (err, data) {
  var customobjectarray = json.parse(data);
});
Run Code Online (Sandbox Code Playgroud)

我猜我错了.我看到有些人提到了这类事情的序列化程序,但我想仔细检查这是否是我需要的(并且可能在这种情况下如何使用它们获得一些方向).看起来stringify输出似乎很好,所以我不确定为什么JSON不能再将humpty dumpty重新组合在一起.任何帮助将不胜感激.

编辑:text.replace行在/vendor/commonjs-utils/lib/json-ext.js,而不是我的代码.我以为这是JSON的一部分.也许我错了?有没有不同的方法通过JSON解析我的对象数组?

Amj*_*sad 5

fs.readFile当传递文件名和回调时,需要2或3个参数,那么你的回调函数将得到以下两个参数(err, data),其中data是一个原始缓冲区.

所以正确的方法是:

fs.readFile('/savedcustomobjectarray', function (err, data) {
  var customobjectarray = JSON.parse(data.toString('utf8'));
});
Run Code Online (Sandbox Code Playgroud)

data.toString 将编码作为第一个参数.

Alternitavley你可以指定编码作为第二个参数,fs.readFile并让它将字符串传递给回调:

fs.readFile('/savedcustomobjectarray', 'utf8', function (err, data) {
  var customobjectarray = JSON.parse(data);
});
Run Code Online (Sandbox Code Playgroud)

Node API 文档是你最好的朋友!