让我先说明我是一个完整的编程和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'
导致此错误的代码是:
fs.readFile('/savedcustomobjectarray', function (err, data) {
var customobjectarray = json.parse(data);
});
我猜我错了。我看到有些人提到这类事情的序列化程序,但我想仔细检查这是否是我需要的(并且可能在这种情况下如何使用它们获得一些方向)。看起来stringify输出似乎很好,所以我不确定为什么JSON不能再将humpty dumpty重新组合在一起。任何帮助将不胜感激。
编辑: text.replace行在/vendor/commonjs-utils/lib/json-ext.js中,而不是我的代码。我以为这是JSON的一部分。也许我错了?是否有不同的方法通过JSON解析我的对象数组?
答案 0 :(得分:5)
fs.readFile
需要2或3个参数,当只传递文件名和回调时,你的回调函数将获得以下两个参数(err, data)
,其中data
是原始的{{3} }}。
所以正确的做法是:
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);
});
节点API buffer是您最好的朋友!