2

让我承认我是一个完整的编程和 javascript 菜鸟,这一事实是我麻烦的根源。

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

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

导致此错误的代码是:

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

我猜我做错了。我看到有些人提到这类事情的序列化程序,但我想仔细检查一下这是否是我需要的(也许可以就如何在这种情况下使用它们获得一些指导)。不过,似乎 stringify 输出很好,所以我不确定为什么 JSON 不能把小矮人重新组合在一起。任何帮助将不胜感激。

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

4

1 回答 1

5

fs.readFile接受 2 或 3 个参数,当仅传递文件名和回调时,您的回调函数将获取以下两个参数(err, data),其中data是原始缓冲区

所以正确的做法是:

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

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

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

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

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

于 2011-05-05T17:39:12.273 回答